与熊猫相比,Dask不能正确分组/应用结果

时间:2019-10-21 01:50:09

标签: python pandas multiprocessing dask

我有一个非常大的数据帧(1.5亿行-30GB RAM)。我进行分组(大约40个分组),并在每个分组上应用一个函数。大约需要30分钟才能执行所有操作。这是我使用的代码:

df = df.groupby(by='date').apply(func=my_func)

由于操作不是相互依赖的,所以我认为我会使用Dask分别并行处理每个组的处理。

所以我使用以下代码:

from dask import dataframe as dd



df_dask = dd.from_pandas(df_pandas, npartitions=40)
template = pd.DataFrame(columns=['A','B','C','D','E'])
df_dask = df_dask.groupby(by='date').apply(func=my_func, meta=template)
df_dask = df_dask.compute()

但是,当我运行它时,我得到的结果取决于 npartitions 的值。如果我给定值1,它会给我相同(正确的结果),但它花费的时间与熊猫相同。如果给它更大的数字,它的执行速度会更快,但返回的行数会更少。我不了解npartition和groupby之间的关系。

此外,如果我尝试使用稍大一点的DataFrame(40GB),即使我的计算机上有64GB内存,Dask也会用尽内存。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Dask的DataFrameGroupBy.apply将用户提供的函数应用于每个分区:https://docs.dask.org/en/latest/dataframe-api.html#dask.dataframe.groupby.DataFrameGroupBy.apply

如果需要自定义缩减,请使用Aggregate:https://docs.dask.org/en/latest/dataframe-groupby.html#aggregate