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



我有一个非常大的(150M 行 - 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()

但是,当我运行它时,我会得到不同的结果,具体取决于我给它的n分区的值。如果我给出的值为 1,它会给我相同(且正确(的结果,但随后需要与熊猫相同的时间。如果我给它一个更大的数字,它执行得更快,但返回的行要少得多。我不明白 npartitions 和 groupby 之间的关系。

此外,如果我尝试使用稍大的数据帧(40GB(,Dask 会耗尽内存,即使我的机器上有 64GB,而熊猫很好。

有什么想法吗?

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

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

相关内容

  • 没有找到相关文章

最新更新