与纯 pandas 相比,Dask map_partitions 在减少时会产生重复并给出错误的结果
Dask map_partitions results in duplicates when reducing and gives wrong results compared to pure pandas
当我使用 map_partitions 使用 dask 进行 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()
在pandas,我
measurements.groupby(["id",measurements.time.dt.to_period("M"),
"country","job"]).source.nunique().reset_index()
PS: 我在一台机器上使用本地集群。
当您调用 map_partitions 时,您说您要对每个分区执行该操作。鉴于每个唯一的分组值都可以出现在多个分区中,对于每个组,对于找到它的每个分区,您将获得一个条目。
如果有一种方法可以跨分区进行 groupby 并自动巧妙地合并结果,那会怎样?幸运的是,这正是 dask 所做的,您根本不需要使用 map_partitions。
measurements.groupby(...).field.nunique().compute()
当我使用 map_partitions 使用 dask 进行 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()
在pandas,我
measurements.groupby(["id",measurements.time.dt.to_period("M"),
"country","job"]).source.nunique().reset_index()
PS: 我在一台机器上使用本地集群。
当您调用 map_partitions 时,您说您要对每个分区执行该操作。鉴于每个唯一的分组值都可以出现在多个分区中,对于每个组,对于找到它的每个分区,您将获得一个条目。
如果有一种方法可以跨分区进行 groupby 并自动巧妙地合并结果,那会怎样?幸运的是,这正是 dask 所做的,您根本不需要使用 map_partitions。
measurements.groupby(...).field.nunique().compute()