首页 >数据库 >mysql教程 >如何获取 Spark DataFrame 中每组的前 N ​​个项目?

如何获取 Spark DataFrame 中每组的前 N ​​个项目?

Linda Hamilton
Linda Hamilton原创
2024-12-23 01:57:15436浏览

How to Get the Top N Items per Group in a Spark DataFrame?

使用 Spark DataFrame GroupBy 获取每组前 N 个项目

在 Spark DataFrame 操作中,您可能会遇到需要按特定列对数据进行分组并检索前 N 个项目的情况每组内的项目。本文演示了如何使用 Scala 实现此目的,灵感来自 Python 示例。

考虑提供的 DataFrame:

user1 item1 rating1
user1 item2 rating2
user1 item3 rating3
user2 item1 rating4
...

Scala 解决方案

检索前 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn