Java程序中的数据计算

由于各种各样原因,我们经常需要在Java程序中进行数据计算处理

系统设计要求,业务逻辑与数据存储分离

数据分散在不同的数据源中

计算逻辑复杂,SQL实现困难

在Java中实现数据计算的痛点

代码繁琐冗长,复杂计算实现困难,不易编写和维护
这么长的代码仅仅实现了单个字段分组单个字段汇总的功能
需要简化JAVA计算的实现手段

解决办法:Java专业计算包——集算器

配合JAVA使用的专业计算(JAR)包,简化JAVA计算代码
说明:SPL是esProc采用的脚本语言,独立存储的SPL脚本文件,相当于外置存储过程,Java通过JDBC接口传入SPL语句实现结构化计算或执行脚本。

SPL实现分组

写代码,简单才是硬道理

常规分组

汇总每个人的值班天数

A
1 =file(“/Users/test/duty.xlsx”).importxls@tx()
2 =A1.groups(name;count(name):count)
这类基本运算还可以直接用SQL写:SELECT name,count(name) FROM user/test/duty.xlsx GROUP BY name

每组Top N

获取每个月、每个人、头三天的加班记录

A
1 =file(“/Users/test/duty.xlsx”).importxls@tx()
2 =A1.groups(month(workday):mon,name;~.top(3):top3)

对位分组

按顺序分别列出使用 Chinese、English、French 作为官方语言的国家数量

A
1 =connect(“mysql”)
2 =A1.query@x(“select * from world.countrylanguage where isofficial=‘T’”)
3 [Chinese,English,French]
4 =A2.align@a(A3,Language)
5 =A4.new(A3(#):name,~.len():cnt)

简化复杂SQL

计算目标:某支股票最长连续涨了多少交易日
select max(continuousDays)-1
from (select count(*) continuousDays
	from (select sum(changeSign) over(order by tradeDate) unRiseDays
		from (select tradeDate,
			case when closePrice>lag(closePrice) over(order by tradeDate)
			then 0 else 1 end changeSign
		from stock) )
	group by unRiseDays)

SQL解法

  • SQL在使用窗口函数的情况下嵌套三层完成;
  • 你试试能读懂吗?
A
1 =stock.sort(tradeDate)
2 =0
3 =A1.max(A2=if(closePrice>closePrice[-1],A2+1,0))

SPL解法

其实这个计算很简单,按照自然思维:先按交易日排序(行1),然后比较当天收盘价比前一天高就+1,否则就清零,最后求个最大值(行3)

多样性数据源支持

JAVA计算能力难以胜任多样性数据源

集算器内置接口便捷访问

  • MongoDB、Redis、Cassandra、ElasticSearch
  • Hadoop
  • Excel、Json、XML、TXT
  • Http Restful、Web Services、OLAP4j 、...
mongoDBexceltxt文本轻松获得(复杂)计算能力

丰富的计算能力(部分)

辅助MongoDB计算

  • JOIN运算
  • 单表多次参与运算
  • 简单IN运算
  • 外键对象化
  • APPLY算法的简单实现循环合集
  • 多表合集
  • 并集
  • TopN运算
  • ……

辅助数据库计算

  • 使用序列参数向SQL传递值的列表
  • 不同数据库翻译SQL:适应不同类型数据库
  • 单表分段并行取数
  • 多表并行取数
  • 多库并行写数
  • 同构表拼接动态SQL语句
  • ……

结构化文件计算

  • 小文件数据过滤
  • 文本数据读取
  • 小文件数据汇总求和
  • 小文件数据跨列计算
  • 小文件数据排序
  • 小文件分组聚合
  • 多个小文件数据关联查询
  • 小文件数据分组后过滤
  • ……

大文件计算

  • 大文件数据过滤
  • 大文件数据汇总求和
  • 大文件数据跨列计算
  • 大文件数据去重计数
  • 大文件数据排序
  • 大文件分组聚合,小结果集
  • 大文件分组聚合,大结果集
  • ……
北京润乾信息系统技术有限公司