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

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可以读取各种文本文档中的内容,也可以操作文本文档(word,excel,pdf,txt等格式的文档)

    Kmeans文本聚类java实现

    在Java环境中实现KMeans算法进行文本聚类,可以为大数据分析、信息检索和推荐系统等应用场景提供有力支持。 KMeans算法的基本思想是通过迭代过程,不断调整样本的归属,使得同一簇内的样本尽可能接近,不同簇间的...

    Java 中文文本摘要生成

    本文主要探讨的是如何在Java环境下利用jieba分词库来实现中文文本的摘要生成。jieba是一个非常流行的开源中文分词库,它支持多种功能,包括分词、词性标注、关键词提取等,对于处理中文文本具有很高的效率和准确性。...

    文本编辑器(java)

    本文将深入探讨一个基于Java实现的文本编辑器项目,旨在帮助初学者理解如何利用Java进行图形用户界面(GUI)编程,以及如何实现基本的文本编辑功能。 首先,我们要明白Java是一种广泛使用的多平台编程语言,它具有...

    java文本编辑器java文本编辑器

    java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java文本编辑器java...

    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毕业设计...

    Similarity 文本比对程序java文本比较算法

    2. **Java文本比较算法**:在Java中,实现文本比对通常涉及字符串操作,如`equals()`、`contains()`等方法,但更复杂的比对需求会使用特定的算法。例如,Jaccard相似度、余弦相似度、Levenshtein距离等。 3. **...

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

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

    Java语言实现文本转语音

    Java语言实现文本转语音主要依赖于特定的库和API,其中一种常见的方法是通过调用DLL(动态链接库)文件来实现。在这个场景下,Java程序利用Jacob库来与Windows系统的语音合成引擎交互,将文本转化为可听见的语音。...

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

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

    Java写的文本加密器

    Java编写的文本加密器是一种用于保护隐私和敏感信息的实用工具。它的工作原理是对文本进行编码,使得原始数据变得难以理解,除非拥有正确的解密密钥。这种加密过程是通过应用特定的算法来实现的,这些算法可以是对称...

    java实现文本输出Excel

    在Java编程语言中,将普通文本转换为Excel文件是一项常见的任务,特别是在数据分析、报表生成或者数据导出场景中。这个例子提供了一种方法,通过Java API来实现这一功能。主要涉及的技术点包括对Apache POI库的使用...

    java简易文本编辑器

    Java简易文本编辑器是一款基于Java编程语言开发的轻量级应用程序,主要功能是提供文本的查看、编辑以及查找替换操作。这款编辑器旨在为用户提供一个简单易用的平台,进行基本的文字处理工作,如编写代码、记事或者...

    java html串转换成文本串

    在Java编程中,将HTML字符串转换为纯文本字符串是一个常见的需求,这主要涉及到解析HTML文档并提取其中的文本内容。HTML是一种标记语言,用于构建网页结构,而纯文本则只包含可读字符,不含有任何格式化或结构信息。...

    java实现 文本相似度

    Java作为一种通用且强大的编程语言,提供了丰富的库和工具来实现文本相似度计算。以下我们将深入探讨如何在Java中实现文本相似度。 首先,文本相似度的计算通常基于特定的算法,例如余弦相似度、Jaccard相似度、...

    java文本相似度对比

    总的来说,本项目利用Java和HanLP实现了高效、准确的文本相似度对比功能,这对于需要处理大量文本数据的场景非常有帮助。通过SimHash算法,可以在保证计算效率的同时,有效评估文本之间的相似性。而HanLP的使用则...

Global site tag (gtag.js) - Google Analytics