有时我们需要查询大文本而不是数据库,这时就需要流式读入文件并实现查询算法,还要进行并行处理以提高性能。但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差,难以实现高效的并行处理。
使用免费的集算器可以弥补这一不足。集算器封装了丰富的结构化文件读写和游标计算函数,书写简单代码就能实现并行计算,并提供了易用的JDBC接口。JAVA应用程序可以将集算器脚本文件当做数据库存储过程执行,传入参数并用JDBC获得返回结果,详情参考集算器用作Java计算类库的应用结构。
下面举例说明集算器协助JAVA查询大文本的过程。
源数据sOrder.txt如下:
要查询起止时间是startDate、endDate之间,金额大于argAmount的订单,只需使用如下代码:
使用函数cursor以游标方式打开文件,@t表示将第1行读为列名。之后进行结构化查询,查询结果不大的情况下可以用fetch读入内存,如下:
如果查询结果内存装不下,可以在集算器中直接返回游标(即去掉A3代码),在JAVA中只需用JDBC流式读取即可获得计算结果。
集算器还可以实现多线程并行计算,最简单方法就是在上述代码的cursor函数中使用@m,这表示多线程读取文件。
也可以手工分段,在读取和计算部分都使用多线程并行计算,代码如下:
上述代码用8个游标打开文件,每次读取文件的指定部分。@z表示按字节数将文件大致分为几部分,只读取其中一部分,集算器会自动去头补尾,以保证取出的数据是整行。
函数conj可合并计算结果,@x表示合并的对象是游标,@m表示并行计算。需要注意的是,函数conj无法保证结果顺序和源数据一致。
上述代码使用了集算器内置的并行计算函数,如果计算过程较复杂,并且内存可以装下计算结果,则适合用显式并行计算语句。代码如下:
上述代码用8个子线程分别读取大文件,执行查询后再将结果返回给主线程。函数fork可执行子线程,作用范围B2-B3。线程内部可用A2来获取入口参数,线程外部可用A2获取所有线程的计算结果。
对于有序数据,可以用二分法来提高查询性能。比如数据已按Client和OrderID排序,现在要根据参数argClient和argOrder找出相应的记录,可以使用下面的代码:
begin,end是二分法的起止位置,m是中间位置。
B4:按字节数定位到中间位置,打开游标读入一条记录,集算器会自动实现去头补尾,取出完整记录。如果定位成功,则将当前记录存储在C5。如果定位不成功,则继续比较集合大小并重新设置begin,end。
相关推荐
java读取超大文本文件,java读取超大文本文件,java读取超大文本文件,java读取超大文本文件
java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java...
java可以读取各种文本文档中的内容,也可以操作文本文档(word,excel,pdf,txt等格式的文档)
JAVA毕业设计文本编辑器JAVA毕业设计文本编辑器JAVA毕业设计文本编辑器JAVA毕业设计文本编辑器JAVA毕业设计文本编辑器JAVA毕业设计文本编辑器JAVA毕业设计文本编辑器JAVA毕业设计文本编辑器JAVA毕业设计文本编辑器...
java实现的文本聚类使用了kmeans算法
本次使用JAVA语言,采用3DES加密算法进行对文本文件的加密,通过二进制和十六进制的转换来实现,产生加密文件,再对加密文件进行解密。 关键词:DES加密算法、加密、解密。摘要 随着现代网络技术的飞速发展,人们...
JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA文本编辑器 JAVA...
java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计...
基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java...
解决当内存资源不充足时大数据量的JSON文本解析为JSON对象会导致内存溢出的问题。 基于org.json的部分源代码,以及新增的JsonLazyer类。 原理:用时创建的规则降低传统解析器一次性将...大容量JSON文本解析为JSON对象。
java 代码实现的网络新闻文本自动分类,采用朴素贝叶斯和支持向量机两种方法实现!
中文自动文摘,基于jieba分词,全Java代码。给定文本输出自定义长度的文摘。
java图形用户界面学习,简单文本编辑器,有字体设计、大小、保存、另存、打开等功能
Java 读写文件文本文件的示例
java 文本学习资料
JAVA查重算法,包括HanLP 相似度比较、二叉树、DFA算法实现、敏感词处理工具、IKAnalyzer中文分词工具、分词进行...并配置了相关的调用样例,可以用于毕业论文的查询,文本查重、坐落地址的查重等简单的学术查重。
使用java实现输出文本相似度的一些代码。能够运行,有结果有数据。
这是一个完整的javaGUI程序设计的作品 1.带完整报告。 2.带使用方法详解。 3.带java环境搭建。 4.适合高职高专以及本科计算机专业学生进行Java课程设计时参考 5.作品介绍 这是一个简单的文本编辑器 用javaGUI编程...
java文本转语音服务语音测试文本