根据经验,每当您在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
时,一个单独的索引是否永远不可能在两个不同的分区中?如果不是,那么在什么条件下会保持此属性?
赏金:我将奖励那些从可靠来源中汲取的答案。例如,参考实现以显示必须保持此属性。
set_index
行为。这个答案非常相关和有趣,但并没有解决我的问题。 - Dahnknown_divisions
是False
)。我正在使用 Dask2021.08.01
、Pandas1.3.1
和 PyArrow5.0.0
。 - Dahn