Как выбрать первый ряд каждой группы?

У меня есть DataFrame, сгенерированный следующим образом:

df.groupBy($"Hour", $"Category")
  .agg(sum($"value") as "TotalValue")
  .sort($"Hour".asc, $"TotalValue".desc))

Результаты выглядят так:

+----+--------+----------+
|Hour|Category|TotalValue|
+----+--------+----------+
|   0|   cat26|      30.9|
|   0|   cat13|      22.1|
|   0|   cat95|      19.6|
|   0|  cat105|       1.3|
|   1|   cat67|      28.5|
|   1|    cat4|      26.8|
|   1|   cat13|      12.6|
|   1|   cat23|       5.3|
|   2|   cat56|      39.6|
|   2|   cat40|      29.7|
|   2|  cat187|      27.9|
|   2|   cat68|       9.8|
|   3|    cat8|      35.6|
| ...|    ....|      ....|
+----+--------+----------+

Как видите, DataFrame упорядоченHour в порядке возрастания, затемTotalValue в порядке убывания.

Я хотел бы выбрать верхний ряд каждой группы, т.е.

из группы Час == 0 выберите (0, кат 26,30,9)из группы Час == 1 выберите (1, cat67,28.5)из группы Час == 2 выберите (2, cat56,39.6)и так далее

Таким образом, желаемый результат будет:

+----+--------+----------+
|Hour|Category|TotalValue|
+----+--------+----------+
|   0|   cat26|      30.9|
|   1|   cat67|      28.5|
|   2|   cat56|      39.6|
|   3|    cat8|      35.6|
| ...|     ...|       ...|
+----+--------+----------+

Может быть удобно иметь возможность выбирать N верхних строк каждой группы.

Любая помощь высоко ценится.

Ответы на вопрос(8)

Ваш ответ на вопрос