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

按组处理大文件(结构化文本)

阅读更多

有这样一类文本文件:文件太大无法全部读入内存计算;但数据已按某列排序,如果以该列为标准每次读取一组数据,则可以放入内存进行计算。电信通话记录、网站访问记录、商场会员信息等等都属于此类文件。

JAVA实现此算法需要编写大量代码,过程复杂难以维护。使用集算器来辅助Java编程,这类问题就轻松许多。下面我们通过例子来看一下具体作法。

文本文件sOrder.txt存储着大量的订单信息,以tab为分隔符,第一行是列名,数据已按SellerId排序。现在需要每次读入SellerId相同的一组数据,并对每组数据执行同样的数据处理过程。

 

文件sOrder.txt的部分数据如下:



 

集算器脚本如下:



 

 A1:函数cursor以游标方式打开文件,默认的分割符是tab,函数选项@t表示将第一行读为列名。如果只读取前四列,且分割符是逗号,则应当写作:cursor@t(OrderID, Client, SellerId, Amount; ”,”)

A2for A1 ;SellerId。对游标A1进行循环读数,每次读入SellerId相同的一组数据,此时数据才会真正读入内存。

注意这里的for 语句。集算器有for cs,n这样的写法,这表示每次读入游标cs中的n条记录。而for cs;x表示每次读入游标cs中的一组记录,每组记录的x字段相同,数据需要按照x事先排序。本案例的数据已经排过序了,如果尚未排序,则可先用sortx函数排序。

语句for cs;x中的x不止是字段,也可以是表达式,即:每次读入多条数据,直到表达式x发生变化,比如:for A14 ;floor(SellerId/10)。这句代码会将SellerId09的数据归为一组,1019的归为下一组,函数floor表示取整数部分。如果每个SellerId对应的记录比较少,则上述语句可以一次性读入更多的数据,从而提高计算性能。

B3-C3:这是for语句的循环体,用来对每组数据进行同样的数据处理。处理过程并非本文重点,本案例设计为:计算每个销售员(SellerId)的销售额,如果销售额大于10000,则将该销售员的销售记录追加到文件result.txt

值得注意的是,for语句的作用范围用缩进就可以表示,而无需用括号或begin/end等标记。另外,循环变量用for所在单元格的格名就可以表示,即A2表示当前SellerId对应的记录,A2.sum(Amount)表示对这组记录的Amount字段使用求和函数。函数export用来将一组记录输出到文件中,函数选项@a表示以追加的方式输出。

文件result.txt存储着计算结果,部分数据如下:



 

上述脚本已经完成了所有的数据处理工作,接下来通过JDBC将集算器脚本集成在JAVA里,具体的JAVA代码如下:

         //建立esProc jdbc连接

         Class.forName("com.esproc.jdbc.InternalDriver");

         con= DriverManager.getConnection("jdbc:esproc:local://");

         //调用esProc,其中test是脚本文件名

         st =(com.esproc.jdbc.InternalCStatement)con.prepareCall("call test()");

         st.execute();//执行esProc存储过程

         说明:本案例不要求将计算结果返回JAVA,但有时我们会将计算结果追加在单元格中(假设是B2格),并将结果返回JAVA继续加工。这种情况下需要在集算器中增加一句脚本,比如在A4格书写:result B2,这表示将B2里的数据输出到JDBC接口。

         接下来的JAVA代码也需要增加一句代码,用来接收返回的结果,即在execute之后书写:

         ResultSet set = st.getResultSet(); 。

 

  • 大小: 41.6 KB
  • 大小: 21.6 KB
  • 大小: 36.5 KB
0
1
分享到:
评论
1 楼 m635674608 2015-03-06  
请问集算器是开源的吗??还是收费的???

相关推荐

    Rdf-File是一个处理结构化文本文件的工具组件

    Rdf-File组件是针对结构化文本文件处理的工具,它在Java开发环境中扮演着重要角色,特别是在处理大量结构化数据时,能够提供高效、灵活的数据管理和操作能力。 Rdf-File的主要功能包括: 1. **解析与序列化**:该...

    FX 三菱PLC 结构化文本ST 语言与 梯形图混合编程模板_works2梯形图如何转换成语句

    FX 三菱PLC的编程方式多样,其中包括结构化文本(Structured Text, ST)语言和梯形图编程。这两种编程方式各有特点,适用于不同的场景。在实际应用中,有时需要将两者混合使用,以发挥各自的优势。本文将详细介绍...

    结构化文本工具:用于处理结构化文本数据的命令行工具列表

    在处理结构化文本数据时,理解并熟练运用这些工具,能够极大地提高工作效率,无论是数据分析、日志分析还是自动化任务,都有其独特的价值。在实际工作中,往往需要结合使用多种工具,根据具体需求进行组合和定制,...

    文本文件解析

    首先,文本文件是由一系列字符组成的,这些字符可以是纯文本,也可以包含结构化的数据。在解析文本文件时,我们的目标是将这些字符转换成有意义的信息。例如,解析CSV文件是为了获取表格数据,解析JSON或XML文件是...

    springboot+es实现对word,pdf,txt等文件的非结构化数据全文内容检索

    在现代的信息化环境中,非结构化数据如Word文档、PDF和TXT文本的处理变得日益重要。Spring Boot结合Elasticsearch的解决方案为这类问题提供了一种高效且灵活的途径。本教程将详细介绍如何利用Spring Boot集成Elastic...

    基于Java Swing开发的专业的网络数据采集/信息挖掘处理软件源码+可执行文,从网页上抓取结构化的文本、图片、文件等资源信息

    它能够从网页上抓取结构化的文本、图片、文件等资源信息。这通常涉及到HTML解析、网络请求和数据提取等技术。例如,软件可能使用了Jsoup等HTML解析库,通过对网页内容的解析,找到并提取所需数据。同时,对于图片和...

    巧用AWK处理二进制数据文件

    3. 使用AWK工具对文本文件进行处理和格式化。 在AWK脚本中,我们可以使用BEGIN语句来定义初始值,使用for循环来处理每一行的数据,并使用printf语句来输出格式化后的数据。 在实际工作中,我们可能需要根据不同的...

    data_vb.rar_data vb_vb文件读取_vb读取文件_读取文本_读取文本文件

    在VB(Visual Basic)编程环境中,我们经常需要处理文件操作,包括读取、写入和操作文本文件。在这个场景中,"data_vb.rar"是一个压缩包,包含了一个VB示例程序"data_vb"和一个文本文件"www.pudn.com.txt"。这个示例...

    人工智能-NLP技术 自然语言处理 迈向非结构化数据的第一步 共24页.pptx

    总的来说,NLP技术是理解和处理非结构化数据的关键,涵盖了从基本的词法分析、分词,到复杂的语义理解、情感分析等多个层面。随着技术的不断发展,NLP将在人机交互、信息检索、自动翻译等领域发挥更大的作用,推动...

    一个原始文本文件的格式

    3. **文件结构**:原始文本文件没有预定义的结构,内容可以是任意的字符序列。它可以是简单的文本数据,如日记、文档,也可以是复杂的编程源代码,包含变量、函数、注释等。 4. **阅读和编辑**:用户可以使用文本...

    文本文件处理VC,VB,C#资料

    假设用户需要将文本文件中所有出现的“16进制数”替换成“十六进制数”,并且希望保留原有文件结构不变。此时,用户可以使用开发好的工具进行快速替换,步骤如下: 1. 打开文件; 2. 输入查找关键词“16进制数”和...

    Processing文本可视化

    3. **数据结构转换**:根据可视化需求,可能需要将文本数据转换为数组或列表,便于后续处理。例如,如果每个行代表一个数据点,我们可以使用`split()`按行分割字符串并存储到数组中。 4. **生成文字标签**:在...

    按行随机打乱文本文件(xe3)

    这个程序可能用于数据分析、文本处理或者任何需要随机化文本顺序的场景。Delphi是一种基于Object Pascal的集成开发环境,它提供了强大的编程能力,广泛应用于桌面应用软件的开发。 【描述】"随机打乱文本文件的每一...

    超级列表框数据保存到文本文件易语言模块源码

    总结来说,这个易语言模块实现了从超级列表框中读取数据并将其保存到文本文件的功能,对于初学者来说,这是一个很好的实践案例,可以学习到数据操作、文件I/O以及模块化编程等相关知识。同时,通过对源码的阅读和...

    AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。

    它允许用户通过模式匹配和动作来处理文本文件,对于数据分析、日志分析以及格式化输出等任务尤其高效。 AWK的工作原理主要基于两个核心概念:模式和动作。模式定义了文本中的哪些部分需要被处理,而动作则定义了...

    Excel-VBA实用技巧范例-将文本文件导入到工作表中.zip

    在Excel中,VBA(Visual Basic for Applications)是一种...这是一项非常实用的技能,尤其对于处理大量结构化文本数据的情况。记住,实践是最好的老师,动手尝试并不断优化你的代码,你将在VBA编程的道路上更进一步。

    半结构化数据及其数据模型

    随着互联网的快速发展,半结构化数据(semi-structured data)作为一种介于完全结构化数据(如关系数据库中的表格和对象数据库中的对象)和非结构化数据(如文本、声音、图像)之间的数据形式,已经成为网络中不可或...

    js读取cvs,并转化成数组,前端处理cvs文件

    在现代Web应用中,前端处理数据的能力越来越重要,特别是在处理大量结构化数据时。本教程将详细介绍如何使用JavaScript(JS)来读取CSV(逗号分隔值)文件,并将其转换为数组,以便进一步处理和展示,从而减轻后端...

Global site tag (gtag.js) - Google Analytics