【问题标题】:Dask map_partitions results in duplicates when reducing and gives wrong results compared to pure pandas与纯熊猫相比,Dask map_partitions 在减少时会导致重复并给出错误的结果
【发布时间】:2020-02-28 13:48:22
【问题描述】:

当我使用 dask 使用 map_partitions 进行 groupby 时,与简单的 pandas groupby 相比,我获得了重复的数据和错误的结果。但是当我使用 n_partitons=1 时,我得到了正确的结果。 为什么会这样?以及如何使用多个分区并仍然获得正确的结果?

我的代码是

measurements = measurements.repartition(n_partitions=38)
measurements.map_partitions(lambda df : df.groupby(["id",df.time.dt.to_period("M"), 
"country","job"]).source.nunique()).compute().reset_index()

在熊猫中,我愿意

measurements.groupby(["id",measurements.time.dt.to_period("M"), 
    "country","job"]).source.nunique().reset_index()

PS:我在单机上使用本地集群。

【问题讨论】:

    标签: python pandas parallel-processing distributed-computing dask


    【解决方案1】:

    当您调用 map_partitions 时,您表示您想在每个分区上执行该操作。鉴于每个唯一的分组值可以出现在多个分区中,您将获得每个组的条目,对于找到它的每个分区。

    如果有一种方法可以跨分区进行 groupby 并自动为您智能地合并结果怎么办?幸运的是,这正是 dask 所做的,您根本不需要使用 map_partitions。

    measurements.groupby(...).field.nunique().compute()
    

    【讨论】:

    • 感谢您的回答。但是 dask 是否支持 groupby 多列?上次我检查,它说它不支持。
    • 是的,确实如此。我不知道他们添加了这个功能。感谢@mdurant的回答
    • 编辑:NotImplementedError: groupby-apply with a multiple Series 目前不支持
    • 我说的是这个功能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多