Столбец Dataframe для отображения порядка сохранения в Pyspark - PullRequest
0 голосов
/ 28 мая 2020

У меня есть фрейм данных Spark, содержащий 2 столбца, «id» и «timetamp». Как преобразовать столбец «id» в список с сохранением исходного порядка по метке времени? Когда я пытаюсь забрать, заказ не сохраняется.

Спасибо

1 Ответ

0 голосов
/ 28 мая 2020

вы не можете использовать collect_list, так как это недетерминировано c сбор элементов по группе, см. Do c -

/**
   * Aggregate function: returns a list of objects with duplicates.
   *
   * @note The function is non-deterministic because the order of collected results depends
   * on order of rows which may be non-deterministic after a shuffle.
   *
   * @group agg_funcs
   * @since 1.6.0
   */
  def collect_list(e: Column): Column = withAggregateFunction { CollectList(e.expr) }

В распределенных вычислениях сбор элементов по определенным порядок невозможен, поскольку данные распределяются по узлам. Для этого вам нужно собрать данные в один раздел на исполнителе, а затем выполнить агрегирование. This may cause Resource crunch on the executor. Если вы знаете, что количество ваших данных меньше , вы можете сделать это, используя UDAF, объединив данные в 1.

Если у вас есть столбец с перераспределением разделов который не искажается, вы можете выполнить это действие эффективным и надежным способом

Вот хороший пример для сортировки значений на основе метки времени с помощью cloudera

...