首頁 >資料庫 >mysql教程 >如何取得 Spark DataFrame 中每組的前 N ​​個專案?

如何取得 Spark DataFrame 中每組的前 N ​​個專案?

Linda Hamilton
Linda Hamilton原創
2024-12-23 01:57:15443瀏覽

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