繁体   English   中英

处理巨大的csv文件

[英]processing huge csv file

假设我有一个巨大的csv(约10Gb)文件,如下所示:

name1,150
name2,89
name3,50

现在,我想获取所有第二列的总和,并以两种方式编写代码。

import csv
fp=open("d:\\testdata.csv")

def total(pointer):
reader=csv.reader(pointer)
 for i in reader:
     yield (i[1])
sum=0
for t in total(fp):
 sum+=int(t)
print(sum)

import csv
fp=open("d:\\testdata.csv")
reader=csv.reader(fp)
sum=0
for i in reader:
  sum+=int(i[1])
print(sum)

哪种方法更好? 第一个使用generator的有什么优势吗? 如果不是,以防万一使用发电机对我们有利?

我怀疑这无关紧要。 在这里,我们谈论的是CPU纳秒级优化的工作负载,该工作负载可能会受到I / O的约束。

让我们退后一步。 这是一次性的操作吗? 您的数据大小确实是10 GB吗? 如果是这样,停止; 你完成了。 花时间在Stack Overflow上发布将是代码的主要成本。 :-)

如果不是这样-也就是说,您将在可能更大的数量级的数据集上重复执行此操作-您可能需要集中精力解决I / O问题。 您可能需要将数据拆分到多个磁盘上,并使用多个线程对其进行攻击。 这是典型的MapReduce模式 Apache Presto是用于分隔和征服CSV文件的常用引擎。

如果像我一样,您懒得弄清楚如何设置Presto,请看一下托管解决方案,例如Amazon Athena (基于Presto)或Google BigQuery 两者都有Python SDK。

(完整披露:我是AWS的解决方案架构师,但是这里的观点属于我自己。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM