动态查询大文本

这篇博客讨论了在处理超过1百万记录的4.5GB CSV文件时遇到的问题,包括OpenOffice的导入限制和资源不足。作者推荐使用SPL(Spreadsheet Processor Language)进行流式读取和过滤操作,以简化代码并减少内存消耗。此外,还提到了通过SQL查询和集算器的并行计算功能来提高性能,并提供了示例代码。对于大量查询结果,可以将其导出到文件中以避免内存限制。
摘要由CSDN通过智能技术生成

【问题】

I am trying to extract certain records from a 4.5GB csv file and am running into some problems. (i) OpenOffice will only import 1 million records, and this file has more (ii) Even when working with only 1 million records, my 4GB RAM computer can’t handle it.

【回答】

用 JAVA 可以对大文本实现流式读取,但代码比较难写。这种情况可以试试 SPL,代码更加简洁。

比如从文件 emplyee.csv 中查询出 1981 年 1 月 1 日(含)之后出生的女员工,代码如下:

A
1=file("D:/emplyee.csv").cursor@tc()
2=A1.select(BIRTHDAY>=date("1981-01-01") && GENDER=="M")
3=A1.fetch()

如果条件是不定的,可以将 A2 的代码改为:A1.select(${where}),这样就可以将查询条件写在 where 参数里,实现动态查询。如果查询结果较多,内存放不下,还可以将 A3 改为 file(“D:/result.txt”).export(A2),这可以将计算结果直接输出到文件中。

当然,除了上面这种写法外,集算器里还能对 SQL 添加条件,查询 csv 文件,如 =connect().query("select * from D:/emplyee.csv where"+where)

如果想提高性能,还可以使用多线程并行查询,具体内容可以参考集算器教程 并行计算小节。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值