ホームページ >データベース >mysql チュートリアル >Spark DataFrame 内の各グループの上位 N レコードを取得するにはどうすればよいですか?

Spark DataFrame 内の各グループの上位 N レコードを取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-23 11:46:36438ブラウズ

How to Get the Top N Records for Each Group in a Spark DataFrame?

DataFrame 内の各グループの TopN を取得する

Spark DataFrame では、多くの場合、データを特定の列でグループ化し、上位を取得する必要があります。各グループからの N 個のレコード。たとえば、ユーザー項目の評価データを含む DataFrame があり、各ユーザーの最高評価の項目を見つけたいとします。

Scala ソリューション

The Scalaこの問題を解決するには、ランク ウィンドウ関数を使用します。その方法は次のとおりです:

  1. 上位 N の値を定義します:

    val n: Int = ???
  2. ユーザーがデータを分割するウィンドウ定義を作成します。列を作成し、レコードをその降順でランク付けします。評価:

    val w = Window.partitionBy($"user").orderBy(desc("rating"))
  3. ランク関数を使用してランク列を DataFrame に追加します:

    df.withColumn("rank", rank().over(w))
  4. のみを保持するように DataFrame をフィルタリングします。それぞれの上位 N 個のレコードグループ:

    df.where($"rank" <= n)

行番号による代替

結合を解除する必要がない場合は、代わりに row_number 関数を使用できます。ランク関数の。これにより、各グループの各レコードに一意の行番号が与えられます。

df.withColumn("row_number", row_number().over(w))

その後、以前と同じ基準を使用して、各グループの上位 N レコードのみを保持するように DataFrame をフィルタリングできます。

以上がSpark DataFrame 内の各グループの上位 N レコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。