У меня есть 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 верхних строк каждой группы.
Любая помощь высоко ценится.