【发布时间】:2021-12-02 19:57:45
【问题描述】:
从经验上看,每当您在 Dask 数据帧上 set_index 时,Dask 总是会将具有相同索引的行放入单个分区中,即使它会导致分区严重不平衡。
这是一个演示:
import pandas as pd
import dask.dataframe as dd
users = [1]*1000 + [2]*1000 + [3]*1000
df = pd.DataFrame({'user': users})
ddf = dd.from_pandas(df, npartitions=1000)
ddf = ddf.set_index('user')
counts = ddf.map_partitions(lambda x: len(x)).compute()
counts.loc[counts > 0]
# 500 1000
# 999 2000
# dtype: int64
但是,我在任何地方都找不到这种行为的保证。
我曾尝试自己筛选代码但放弃了。我相信这些相互关联的功能之一可能就是答案:
当你set_index时,是不是一个索引永远不能在两个不同的分区中?如果不是,那么这个属性在什么条件下成立?
赏金:我会将赏金奖励给来自信誉良好的来源的答案。例如,引用实现以表明该属性必须保持。
【问题讨论】:
标签: python dataframe indexing dask