ホームページ >データベース >mysql チュートリアル >Scala を使用して Spark SQL データフレーム内のユーザー グループごとに上位 N 項目を取得する方法
問題:
ユーザーを表す列を持つ Spark SQL DataFrame が指定された場合、アイテム、およびユーザー評価を使用して、ユーザーごとにグループ化し、各グループの上位 N 個のアイテムを取得するにはどうすればよいですか? Scala?
答え:
これを達成するには、次のようにランク ウィンドウ関数を利用できます:
import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions.{rank, desc} val n: Int = ??? // Define the window specification val w = Window.partitionBy($"user").orderBy(desc("rating")) // Calculate the rank for each item val withRank = df.withColumn("rank", rank.over(w)) // Filter to retain only the top N items val topNPerUser = withRank.where($"rank" <= n)
詳細:
ランク (同順位を無視) ではなく連続した行番号を割り当てる row_number 関数を使用したい場合は、rank を row_number に置き換えることができます。ウィンドウ定義内:
val w = Window.partitionBy($"user").orderBy(desc("rating")) val withRowNumber = df.withColumn("row_number", row_number.over(w)) val topNPerUser = withRowNumber.where($"row_number" <= n)
以上がScala を使用して Spark SQL データフレーム内のユーザー グループごとに上位 N 項目を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。