gpt4 book ai didi

python - 大型 Pandas Dataframe 并行处理

转载 作者:太空狗 更新时间:2023-10-29 20:51:33 25 4
gpt4 key购买 nike

我正在访问一个非常大的 Pandas 数据框作为全局变量。通过 joblib 并行访问此变量.

例如。

df = db.query("select id, a_lot_of_data from table")

def process(id):
temp_df = df.loc[id]
temp_df.apply(another_function)

Parallel(n_jobs=8)(delayed(process)(id) for id in df['id'].to_list())

以这种方式访问​​原始的df似乎是跨进程复制数据。这是出乎意料的,因为原始 df 没有在任何子进程中被更改? (或者是吗?)

最佳答案

对于joblib创建的每个进程,整个DataFrame都需要pickle和unpickled。实际上,这非常慢,并且还需要每个内存的许多倍。

一种解决方案是使用表格格式将数据存储在 HDF (df.to_hdf) 中。然后,您可以使用 select 选择数据子集以进行进一步处理。实际上,这对于交互式使用来说太慢了。它也非常复杂,您的工作人员需要存储他们的工作,以便在最后一步进行合并。

另一种方法是使用 target='parallel' 探索 numba.vectorize。这将需要使用 NumPy 数组而不是 Pandas 对象,因此它也有一些复杂性成本。

从长远来看,dask希望为 Pandas 带来并行执行,但这不是很快就会发生的事情。

关于python - 大型 Pandas Dataframe 并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33612935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com