Spark: сортировка в группе с помощью фрейма данных - PullRequest
0 голосов
/ 04 октября 2019

Используя Spark DataFrame, например.

myDf
  .filter(col("timestamp").gt(15000))
  .groupBy("groupingKey")
  .agg(collect_list("aDoubleValue"))

Я хочу, чтобы collect_list возвращал результат, но упорядоченный в соответствии с меткой времени. Я хочу, чтобы результаты GroupBy были отсортированы по другому столбцу.

Я знаю, что есть другие проблемы, но я не смог найти надежный ответ с помощью DataFrame.

Как это может бытьсделанный? (ответ: сортируйте myDf по "метке времени", пока gorupBy не годится)

Спасибо.

1 Ответ

0 голосов
/ 04 октября 2019

единственный способ - использовать collect_list для структуры, где timestamp - первый элемент, а затем проецировать обратно на aDoubleValue на втором шаге:

myDf
  .filter(col("timestamp").gt(15000))
  .groupBy("groupingKey")
  // collect_list and sort
  .agg(sort_array(collect_list(struct("timestamp","aDoubleValue"))).as("data"))
  .withColumn("data",col("data.aDoubleValue")) // project array back to aDoubleValue
...