Python 达斯克没有';t组/与大熊猫相比,正确应用结果

Python 达斯克没有';t组/与大熊猫相比,正确应用结果,python,pandas,multiprocessing,dask,Python,Pandas,Multiprocessing,Dask,我有一个非常大的数据帧(150M行-30GB RAM)。我做了一个groupby(大约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,

我有一个非常大的数据帧(150M行-30GB RAM)。我做了一个groupby(大约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之间的关系

此外,如果我尝试使用稍大一点的数据帧(40GB),Dask会耗尽内存,即使我的机器上有64GB,而pandas也可以


有什么想法吗?

Dask的DataFrameGroupBy.apply将用户提供的函数应用于每个分区:


如果您需要自定义缩减,请使用Aggregate:

这也是我的想法,但这里没有。如果我理解正确,nPartition不应该影响结果,对吗?因为这只取决于群体。在这种情况下,它改变了结果,因此我的问题是。