MPI 分散分布大型 csv 文件

MPI scatter to distribute large csv file

我有一个很大的 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. 以块的形式处理数据,例如读取 200k 行,分散,收集结果,重复。
  2. 在本地读取数据,例如1/size 每个等级的文件。这可能很难有效地做到。您无法有效地查找 csv 文件中的特定行。所以你必须按大小分隔文件,seek 到你 split 的位置,找到下一个换行符并从那里开始工作,直到你的文件结束后的第一个换行符文件的一部分。
  3. 两者结合。

但话又说回来,您可以逐行连续处理文件,在计算完文件的字数后丢弃每一行。

P.S。考虑 csv 模块。