Como selecionar a primeira linha de cada grupo?
Eu tenho um DataFrame gerado da seguinte maneira:
df.groupBy($"Hour", $"Category")
.agg(sum($"value") as "TotalValue")
.sort($"Hour".asc, $"TotalValue".desc))
Os resultados são parecidos com:
+----+--------+----------+
|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|
| ...| ....| ....|
+----+--------+----------+
Como você pode ver, o DataFrame é ordenado porHour
em uma ordem crescente, então porTotalValue
em ordem decrescente.
Gostaria de selecionar a linha superior de cada grupo, ou seja,
do grupo de horas == 0, selecione (0, cat26,30,9)do grupo de horas == 1, selecione (1, cat67,28,5)do grupo de horas == 2, selecione (2, cat56,39,6)e assim por diantePortanto, a saída desejada seria:
+----+--------+----------+
|Hour|Category|TotalValue|
+----+--------+----------+
| 0| cat26| 30.9|
| 1| cat67| 28.5|
| 2| cat56| 39.6|
| 3| cat8| 35.6|
| ...| ...| ...|
+----+--------+----------+
Pode ser útil também selecionar as N linhas principais de cada grupo.
Qualquer ajuda é muito apreciada.