我有一个大的csv文件,我需要处理每一行来计算一些单词。我需要使用一些MPI方法在多个进程之间分配数据处理。目前,我在mpi4py
库中使用scatter / gather。问题是我需要创建一个长度等于进程数的数组。但是在为大行计数创建列表时出现内存错误。
size = comm.Get_size()
f=open('x.csv')
lines=[[] for _ in range(size)]
for line in f:
# this line raises memory error after about 250000 rows are appended
lines[i%size].append(line)
是否有另一种方法可以在这些流程之间传输大数据?
答案 0 :(得分:1)
您基本上有以下选择:
1/size
。这可能难以有效地完成。您无法有效地搜索csv文件中的特定行。因此,您必须将文件按大小seek
分隔到拆分的位置,找到下一个换行符并从那里开始工作,直到您的部分结束后的第一个换行符为止。文件。但话又说回来,你可以一行一行地连续处理文件,在计算出单词之后扔掉每一行。
P.S。考虑csv
模块。