簡介:
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中文網其他相關文章!