小编S.A*_*S.A的帖子

在python中高效处理〜5000万条记录文件

我们有一个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点左右,它仍在处理中!

问题:

  1. 有没有更好的方法来处理这些记录以改善处理时间?
  2. python是正确的选择吗?awk或其他工具会有帮助吗?
  3. 我猜猜在以下语句中对167K数组进行64字节ID查找是罪魁祸首:
    if fieldAry[CUSTOMER_ID] not in idArray:

还有更好的选择吗?

谢谢!

更新:这是在具有EBS附加卷的EC2实例上处理的.

python csv arrays lookup latency

5
推荐指数
1
解决办法
6215
查看次数

标签 统计

arrays ×1

csv ×1

latency ×1

lookup ×1

python ×1