[英]How to group top item from a JavaRDD without using Spark SQL?
我有JavaRDD,其中包含userId,movieId及其等級。
Rating [userId=1, movieId=2858, rating=4.0], Rating [userId=3, movieId=2858, rating=5.0], Rating [userId=12, movieId=2658, rating=5.0]
。
我想根據觀看次數找到前五部電影。 我嘗試使用Google搜索,但無法繼續探討如何在JavaRDD中對movieId和userId進行分組。 我想統計有多少用戶觀看了一部電影,並將其存儲為Map(movieId, num_of_user)
。 我是新來的Apache Spark。
所需輸出:
2858-2
2658-1
我希望在JavaRDD上執行類似的操作的任何類似示例/鏈接/教程。
更新:我發現了類似的基於scala的問題 。 可以看看,並將scala代碼轉換為java代碼。
提前致謝。
添加Example,您可以使用以下模板構建邏輯
case class Rating(userId: Long, movieId: Long,rating:Long)
val RatingDF = List(
Rating(1, 2858,4),
Rating(3, 2858,5),
Rating(12,2658,5)
).toDF()
RatingDF.show()
//using non sql approch
import org.apache.spark.sql.functions._
val topMovieIDs =
RatingDF.groupBy("movieId").count().orderBy(desc("count")).cache()
topMovieIDs.show()
結果:
+------+-------+------+
|userId|movieId|rating|
+------+-------+------+
| 1| 2858| 4|
| 3| 2858| 5|
| 12| 2658| 5|
+------+-------+------+
+-------+-----+
|movieId|count|
+-------+-----+
| 2858| 2|
| 2658| 1|
+-------+-----+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.