在 Spark DataFrame 操作中,您可能会遇到需要按特定列对数据进行分组并检索前 N 个项目的情况每组内的项目。本文演示了如何使用 Scala 实现此目的,灵感来自 Python 示例。
考虑提供的 DataFrame:
user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 ...
检索前 N 项对于每个用户组,您可以将窗口函数与 orderBy 和 where 操作结合使用。这是实现:
// Import required functions and classes import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions.{rank, desc} // Specify the number of desired top N items val n: Int = ??? // Define the window definition for ranking val w = Window.partitionBy($"user").orderBy(desc("rating")) // Calculate the rank within each group using the rank function val rankedDF = df.withColumn("rank", rank.over(w)) // Filter the DataFrame to select only the top N items val topNDF = rankedDF.where($"rank" <= n)
如果关系不是问题,您可以用 row_number 替换排名:
val topNDF = rankedDF.withColumn("row_num", row_number.over(w)).where($"row_num" <= n)
通过使用这种方法,您可以有效地检索 DataFrame 中每个用户组的前 N 个项目。
以上是如何获取 Spark DataFrame 中每组的前 N 个项目?的详细内容。更多信息请关注PHP中文网其他相关文章!