问题:
给定一个包含代表用户的列的 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中文网其他相关文章!