Это, вероятно, лучше объяснит название.
В основном пользователь, который дал наибольшее количество оценок по каждому жанру. Один пользователь может голосовать за несколько жанров, поэтому, следовательно, топ-9 - это один и тот же пользователь. Таблица "в разобранном виде" содержит две строки. У одного есть userId, а у другого - жанры, за которые он голосовал. Один пользователь может голосовать за несколько жанров.
Код, который я использую:
Dataset<Row> group = exploded.groupBy("userId", "genres").count().orderBy(org.apache.spark.sql.functions.col("count").desc());
И результат из этого следующий:
+------+--------+-----+
|userId|genres |count|
+------+--------+-----+
|45811 |Drama |10296|
|8659 |Drama |4879 |
|270123|Drama |4372 |
|45811 |Comedy |4239 |
|228291|Drama |3932 |
|179792|Drama |3690 |
|98415 |Drama |3586 |
|243331|Drama |3466 |
|8659 |Comedy |3294 |
|229879|Drama |3234 |
|172224|Drama |3041 |
|41190 |Drama |3009 |
|24025 |Drama |2846 |
|166928|Drama |2696 |
|243443|Comedy |2668 |
|32984 |Drama |2662 |
|45811 |Thriller|2578 |
|45811 |Romance |2533 |
|101276|Comedy |2516 |
|179792|Comedy |2511 |
+------+--------+-----+
Есть большая вероятность, что я использую неправильные методы.
Вот результат, который я ищу:
+------+--------+-----+
|userId|genres |count|
+------+--------+-----+
|45811 |Drama |10296|
|45811 |Comedy |4879 |
|45811 |Thriller|4372 |
|45811 |Romance |4239 |
|45811 |Crime |3932 |
|45811 |Documentary|3690 |
|45811 |Action |3586 |
|243331|Horror |3466 |
|45811 |Adventure|3294 |
|45811 |Sci-Fi |3234 |
+------+--------+-----+