gpt4 book ai didi

python - Dask 数据帧 : Can `set_index` put a single index into multiple partitions?

转载 作者:行者123 更新时间:2023-12-04 17:10:27 25 4
gpt4 key购买 nike

从经验上看,每当你set_index在 Dask 数据帧上,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_partitions
  • rearrange_by_column
  • rearrange_by_column_tasks
  • SimpleShuffleLayer

  • 当您 set_index , 是不是单个索引永远不能在两个不同的分区中?如果不是,那么这个属性(property)在什么条件下成立?

    赏金:我将奖励来自信誉良好的来源的答案。例如,引用实现来表明这个属性必须持有。

    最佳答案

    is it the case that a single index can never be in two different partitions?


    不,这当然是允许的。 Dask 甚至打算让这种情况发生。但是,由于 bugset_index ,所有数据仍将在一个分区中结束。
    一个极端的例子(每一行都是相同的值,除了一个):
    In [1]: import dask.dataframe as dd
    In [2]: import pandas as pd
    In [3]: df = pd.DataFrame({"A": [0] + [1] * 20})
    In [4]: ddf = dd.from_pandas(df, npartitions=10)
    In [5]: s = ddf.set_index("A")
    In [6]: s.divisions
    Out[6]: (0, 0, 0, 0, 0, 0, 0, 1)
    如您所见,Dask 打算用于 0 s 要在多个分区之间拆分。然而,当洗牌真正发生时,所有 0 s 仍然在一个分区中结束:
    In [7]: import dask
    In [8]: dask.compute(s.to_delayed()) # easy way to see the partitions separately
    Out[8]:
    ([Empty DataFrame
    Columns: []
    Index: [],
    Empty DataFrame
    Columns: []
    Index: [],
    Empty DataFrame
    Columns: []
    Index: [],
    Empty DataFrame
    Columns: []
    Index: [],
    Empty DataFrame
    Columns: []
    Index: [],
    Empty DataFrame
    Columns: []
    Index: [],
    Empty DataFrame
    Columns: []
    Index: [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]],)
    这是因为 code决定一行属于哪个输出分区不考虑 divisions 中的重复项.治疗 divisions作为一个系列,它使用 searchsorted side="right" ,因此为什么所有数据总是在最后一个分区中结束。
    问题解决后,我会更新此答案。

    关于python - Dask 数据帧 : Can `set_index` put a single index into multiple partitions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69570717/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com