問題:
給定一個包含代表使用者的欄位的Spark SQL DataFrame 、項目和使用者評分,我們如何按使用者分組,然後使用以下方法檢索每個群組的前 N一個項目Scala?
答案:
要實現這一點,我們可以利用排名視窗函數,如下所示:
import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions.{rank, desc} val n: Int = ??? // Define the window specification val w = Window.partitionBy($"user").orderBy(desc("rating")) // Calculate the rank for each item val withRank = df.withColumn("rank", rank.over(w)) // Filter to retain only the top N items val topNPerUser = withRank.where($"rank" <= n)
更多詳情:
如果您喜歡使用 row_number 函數,該函數分配連續的行號而不是排名(忽略關係),您可以在視窗定義中將排名替換為 row_number :
val w = Window.partitionBy($"user").orderBy(desc("rating")) val withRowNumber = df.withColumn("row_number", row_number.over(w)) val topNPerUser = withRowNumber.where($"row_number" <= n)
以上是如何使用 Scala 檢索 Spark SQL DataFrame 中每個使用者群組的前 N 個專案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!