簡體   English   中英

如何在不使用Spark SQL的情況下將JavaRDD中的頂級項目分組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM