Гарантирует ли Dask, что строки внутри раздела (с неуникальным индексом) никогда не будут переупорядочены? - PullRequest
0 голосов
/ 07 июня 2019

Мое приложение должно читать набор данных в 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 голосов
/ 07 июня 2019

Правильно, Dask не будет переупорядочивать строки вашего раздела, если вы выполняете операции Pandas, которые сами обычно не переупорядочивают строки (например, sort, очевидно), что будет верно для любого построчного вычисления.

Действительно, порядок самих разделов сохраняется, поскольку данные проходят через операцию после операции.

...