我们有一个CSV格式的大约4600万条记录的文件.每条记录有大约18个字段,其中一个是64字节ID.我们有另一个文件,其中包含大约167K个唯一ID.需要将与ID对应的记录拉出.因此,我们编写了一个python程序,将167K ID读入一个数组,并处理4600万个记录文件,检查每个记录中是否存在ID.这是代码的片段:
import csv
...
csvReadHandler = csv.reader(inputFile, delimiter=chr(1))
csvWriteHandler = csv.writer(outputFile, delimiter=chr(1), lineterminator='\n')
for fieldAry in csvReadHandler:
lineCounts['orig'] += 1
if fieldAry[CUSTOMER_ID] not in idArray:
csvWriteHandler.writerow(fieldAry)
lineCounts['mod'] += 1
Run Code Online (Sandbox Code Playgroud)
在一小组数据上测试程序,这里是处理时间:
lines: 117929 process time: 236.388447046 sec
lines: 145390 process time: 277.075321913 sec
Run Code Online (Sandbox Code Playgroud)
昨晚〜美国东部时间凌晨3点,我们已经开始在4600万条记录文件(大小约为13 GB)上运行程序,现在它是美国东部时间早上10点左右,它仍在处理中!
问题:
if fieldAry[CUSTOMER_ID] not in idArray: 还有更好的选择吗?
谢谢!
更新:这是在具有EBS附加卷的EC2实例上处理的.