首页 > 编程语言 > 详细

集算器用作Java结构化文件计算类库

时间:2015-12-16 02:13:54      阅读:319      评论:0      收藏:0      [点我收藏+]

? 有时我们不能使用数据库而采用文件系统存储数据,这时就需要自行完成基于文件的数据计算。但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差。

??使用免费的集算器可以弥补这一不足。集算器封装了丰富的结构化文件计算函数,并提供JDBC接口。JAVA应用程序可以将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果,详情参考集算器用作Java计算类库的应用结构。

??下面举例说明JAVA中常见的结构化计算,以及集算器对应的解法。

文本查询

??sOrder.txt是tab分割的文本,现在要用JAVA查询出指定时间段内的订单。

??源数据如下:
bubuko.com,布布扣?

? 集算器代码:
bubuko.com,布布扣?

? 读入文件,默认分隔符是tab,@t表示将第一行读为列头。之后执行条件查询。startDate和endDate是输入参数,比如2010-01-01至2010-12-31。结果:
bubuko.com,布布扣

文本排序

??针对sOrder.txt,请在JAVA中按照客户代码降序排序,按照年、月升序排序。

??集算器代码:=A1.sort(-Client,year(OrderDate),month(OrderDate))

??解释:降序排列使用“-”,年、月需要计算获得。

??引申:如果要在查询的基础上排序,可以写作=A2.sort(…),或者=A1.select(…).sort(…)

??结果:
bubuko.com,布布扣

分组汇总:计算出每个销售员每年的销售额和订单数

??代码:=A1.groups(SellerId,year(OrderDate);sum(Amount),count(~))

??解释:函数group可在分组的同时进行汇总,~表示每组或当前组,count(~)等于count(OrderID)。

??结果:
bubuko.com,布布扣?

获得唯一值:

??列出sOlder中的客户名单。

??代码:=A1.id(Client)

??结果:
bubuko.com,布布扣?

去除重复

??保留sOlder中每个客户每个销售的第一条记录。

??代码:=A1.group@1(Client,SellerId)

??解释:函数group用来分组(可以不汇总),@1表示每组取第1条记录。

??结果:
bubuko.com,布布扣?

TopN

??找到每个销售员销售额最大的3笔订单。

??代码:=A1.group(SellerId;~.top(-Amount;3):t).conj(t)

??解释:函数top过滤出TopN,”-”表示逆序,函数conj用于合并。

??引申:如果只取最大的一笔订单,可以用maxp函数。

??计算结果:
bubuko.com,布布扣?

关联计算
??emp.txt是tab分割的文本,其EId字段对应sOrder中的SellerId字段,请在JAVA中将emp.txt的Name、Dept、Gender这三个字段对齐到sOrder.txt。

??源数据如下:
bubuko.com,布布扣?

? 集算器代码:

bubuko.com,布布扣

? 函数join执行连接运算,并将两个表改名为s和e,@1表示左连接。之后从连接的表中取得需要的字段,组成新的结构化二维表格。结果:
bubuko.com,布布扣?

? 引申:@1表示左链接,@f表示全连接内连接无选项。

??前面的例子假定文件较小,如果文件较大无法放入内存,可用集算器游标进行计算,详情参考相关文档。

?

集算器用作Java结构化文件计算类库

原文:http://datamachine.iteye.com/blog/2264149

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!