Dask是否保证分区内的行(具有唯一索引)永远不会重新排序?

时间:2019-06-07 16:50:20

标签: python pandas dask

我的应用程序需要将数据集读入dask,并分布在多个分区中。对于该数据框,我需要对其进行多项操作(例如,从另一列中减去一列或找到两列的比率)。数据框的索引是一个非唯一列。

由于应用程序完全由元数据驱动,因此直到运行时才知道函数调用的顺序,因此我将应用程序设计为依靠在每个阶段返回新的延迟数据帧。我想知道是否可以巧妙地使用分区和按列级联来提高代码效率。

鉴于这些步骤是相互独立的,在下面的特定示例中,我可以相信最后的操作可以为我的按行比率给出正确的结果吗?即,如果我执行的操作仅向数据帧添加新列,我是否可以相信行的顺序永远不会改变?

def subtract(df1, df2, col1, col2):
  df_mod = copy(df1)
  df_mod[f"{col1}-{col2}"] = df1[col1] - df2[col2]
  return df_mod


def ratio(df1, df2, col1, col2):
  df_mod = copy(df1)

  # Rely on the row ordering being unchanged
  df_mod[f"{col1}/{col2}"] = df1[col1] / df2[col2]
  return df_mod

df = load_function_returns_dask_df()


first = subtract(df, df, "a","b")
second = subtract(df, df, "c","d")

last = ratio(first, second, "a-b","c-d")

我知道我可以直接在数据框上操作以创建新列,但这在任意操作的一般情况下不起作用。

从直觉上来说,该操作应该有效,因为每个分区只是一个熊猫数据框,对于熊猫来说,任意地对数据框中的行进行重新排序是没有意义的,但是我希望通过某种方式来验证这一点更加正式。

1 个答案:

答案 0 :(得分:0)

正确的,Dask不会对分区行进行重新排序,只要您执行的熊猫操作本身通常不会对行进行重新排序(显然是sort之类),这对于任何逐行计算都是正确的

实际上,分区本身的顺序在数据经过一次又一次的操作时得以保留。