【发布时间】:2019-12-26 14:38:28
【问题描述】:
我需要在 python 中对大型数据集 (>10GB) 运行多个 (1000-10000s) 搜索查询。为了加快速度,我想并行运行各个查询。但是,据我了解,将数据集解析到不同的进程会复制它,从而增加内存需求,这很快就会变得不可行。所以,想问问社区,是否可以在不增加内存占用的情况下,在多个并行运行的进程(函数)中解析(处理)一个大数据集?
下面是一个示例脚本。在这里,随着n 的增加,内存使用量会增加并很快变得受限。
from multiprocessing import Pool
import sys
def goo(d):
for k,v in d.items():
print(k,len(v))
d = {'a':[3]*(10**5),
'b':[6]*(10**8)}
n = int(sys.argv[1])
with Pool(processes=n) as pool:
pool.starmap(goo, [[d]]*n)
编辑: 澄清一下,这是一个工具的一部分,将与在不同平台和环境中工作的其他人共享。因此,我需要一些特定于 python 的东西,因为我不想让解决方案依赖于外部依赖项。
【问题讨论】:
-
对于这么大的数据集,您应该考虑设置一个旨在处理规模的框架。 MySQL 或 Apache Arrow 提取 parquet 文件将是一个不错的起点。
-
但是你事先有一个大数据集,它不是通过
narg 动态累积的,对吗? -
@James 这是将与其他人共享的工具的一部分。所以,为了避免依赖,我需要一些基于 python 的解决方案。
标签: python multiprocessing bigdata large-data