首頁 > 資料庫 > mysql教程 > 如何有效率地找到 Spark DataFrame 中每組的前 N ​​個專案?

如何有效率地找到 Spark DataFrame 中每組的前 N ​​個專案?

Barbara Streisand
發布: 2024-12-25 22:55:17
原創
830 人瀏覽過

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

使用 Spark DataFrame 進行分組和 TopN

簡介:
Spark DataFrame 提供了用於操作和聚合資料的強大功能。根據特定欄位將資料分組,然後在每個群組內執行操作,例如尋找前 N 個值,是資料處理中的常見需求。

問題陳述:
考慮Spark DataFrame 包含使用者、專案和評級等欄位。任務是按使用者對資料進行分組,並傳回每組中的前 N ​​個項目,其中 N 是預先定義的數字。

解決方案:

使用視窗函數:

Scala代碼:

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.{rank, desc}

val n: Int = ???

// Window definition
val w = Window.partitionBy($"user").orderBy(desc("rating"))

// Filter
df.withColumn("rank", rank.over(w)).where($"rank" <= n)
登入後複製

說明:
此程式碼利用視窗函數根據評分列依降序對每個使用者群組內的項目進行排名。排名函數為分區內的每一行分配排名,指示其在排序清單中的位置。透過對rank

使用 row_number 函數:

如果不需要處理關係(多個項目具有相同排名的情況),您可以使用 row_number 而不是排名。程式碼與上方類似,用 row_number.over(w) 取代 withColumn 運算式中的rank.over(w)。

透過利用這些分組和視窗技術,您可以有效地找到其中的前 N ​​項Spark DataFrame 中的每個群組,使您能夠有效地從資料中提取有價值的見解。

以上是如何有效率地找到 Spark DataFrame 中每組的前 N ​​個專案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板