分散MPI以分发大型csv文件

时间:2016-04-02 17:17:26

标签: python mpi large-files mpi4py

我有一个大的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)

是否有另一种方法可以在这些流程之间传输大数据?

1 个答案:

答案 0 :(得分:1)

您基本上有以下选择:

  1. 以块的形式处理数据,例如:读取200k行,分散,收集结果,重复。
  2. 在本地读取数据,例如每个等级上的文件1/size。这可能难以有效地完成。您无法有效地搜索csv文件中的特定行。因此,您必须将文件按大小seek分隔到拆分的位置,找到下一个换行符并从那里开始工作,直到您的部分结束后的第一个换行符为止。文件。
  3. 两者结合。
  4. 但话又说回来,你可以一行一行地连续处理文件,在计算出单词之后扔掉每一行。

    P.S。考虑csv模块。