ホームページ >データベース >mysql チュートリアル >Spark DataFrame 内の各グループの上位 N レコードを取得するにはどうすればよいですか?
DataFrame 内の各グループの TopN を取得する
Spark DataFrame では、多くの場合、データを特定の列でグループ化し、上位を取得する必要があります。各グループからの N 個のレコード。たとえば、ユーザー項目の評価データを含む DataFrame があり、各ユーザーの最高評価の項目を見つけたいとします。
Scala ソリューション
The Scalaこの問題を解決するには、ランク ウィンドウ関数を使用します。その方法は次のとおりです:
上位 N の値を定義します:
val n: Int = ???
ユーザーがデータを分割するウィンドウ定義を作成します。列を作成し、レコードをその降順でランク付けします。評価:
val w = Window.partitionBy($"user").orderBy(desc("rating"))
ランク関数を使用してランク列を DataFrame に追加します:
df.withColumn("rank", rank().over(w))
のみを保持するように DataFrame をフィルタリングします。それぞれの上位 N 個のレコードグループ:
df.where($"rank" <= n)
行番号による代替
結合を解除する必要がない場合は、代わりに row_number 関数を使用できます。ランク関数の。これにより、各グループの各レコードに一意の行番号が与えられます。
df.withColumn("row_number", row_number().over(w))
その後、以前と同じ基準を使用して、各グループの上位 N レコードのみを保持するように DataFrame をフィルタリングできます。
以上がSpark DataFrame 内の各グループの上位 N レコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。