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