`
datamachine
  • 浏览: 156867 次
社区版块
存档分类
最新评论

Java查询大文本

阅读更多

  有时我们需要查询大文本而不是数据库,这时就需要流式读入文件并实现查询算法,还要进行并行处理以提高性能。但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。

  • 大小: 26 KB
  • 大小: 21.4 KB
  • 大小: 35.6 KB
  • 大小: 23.9 KB
  • 大小: 28.3 KB
  • 大小: 41.6 KB
0
0
分享到:
评论

相关推荐

    java读取超大文本文件

    java读取超大文本文件,java读取超大文本文件,java读取超大文本文件,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实现

    java实现的文本聚类使用了kmeans算法

    Java文本文件加密与解密

    本次使用JAVA语言,采用3DES加密算法进行对文本文件的加密,通过二进制和十六进制的转换来实现,产生加密文件,再对加密文件进行解密。 关键词:DES加密算法、加密、解密。摘要 随着现代网络技术的飞速发展,人们...

    JAVA文本编辑器.rar

    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毕业设计——文本编辑器.zip java毕业设计...

    基于java实现的文本编辑器.zip

    基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java实现的文本编辑器基于java...

    Java解析JSON文本,大数据量工具包

    解决当内存资源不充足时大数据量的JSON文本解析为JSON对象会导致内存溢出的问题。 基于org.json的部分源代码,以及新增的JsonLazyer类。 原理:用时创建的规则降低传统解析器一次性将...大容量JSON文本解析为JSON对象。

    文本分类java 实现

    java 代码实现的网络新闻文本自动分类,采用朴素贝叶斯和支持向量机两种方法实现!

    Java 中文文本摘要生成

    中文自动文摘,基于jieba分词,全Java代码。给定文本输出自定义长度的文摘。

    文本编辑器(java)

    java图形用户界面学习,简单文本编辑器,有字体设计、大小、保存、另存、打开等功能

    Java 读写文件文本文件的示例

    Java 读写文件文本文件的示例

    java 文本学习资料

    java 文本学习资料

    JAVA文本相似度查重代码及示例

    JAVA查重算法,包括HanLP 相似度比较、二叉树、DFA算法实现、敏感词处理工具、IKAnalyzer中文分词工具、分词进行...并配置了相关的调用样例,可以用于毕业论文的查询,文本查重、坐落地址的查重等简单的学术查重。

    java实现 文本相似度

    使用java实现输出文本相似度的一些代码。能够运行,有结果有数据。

    Java编写的简易文本编辑器

    这是一个完整的javaGUI程序设计的作品 1.带完整报告。 2.带使用方法详解。 3.带java环境搭建。 4.适合高职高专以及本科计算机专业学生进行Java课程设计时参考 5.作品介绍 这是一个简单的文本编辑器 用javaGUI编程...

    java文本转语音服务语音测试文本

    java文本转语音服务语音测试文本

Global site tag (gtag.js) - Google Analytics