ホームページ >データベース >mysql チュートリアル >Spark DataFrame でグループ化された上位 N 集計を効率的に実行するにはどうすればよいですか?

Spark DataFrame でグループ化された上位 N 集計を効率的に実行するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-20 13:36:111012ブラウズ

How to Efficiently Perform Grouped Top-N Aggregation in Spark DataFrames?

Spark DataFrame を使用してグループ化された TopN 集計を実行する方法

Spark SQL では、SQL に似た構文を利用して複雑なデータ操作を実行できます。一般的なタスクの 1 つは、データをグループ化し、各グループから上位 N 個の値を取得することです。 Spark DataFrame を使用してこれを実現する方法は次のとおりです:

特定の列でデータをグループ化するには、GROUP BY 句で列名を指定します:

<br>df。 groupBy("user")<br>

それぞれの中で結果を並べ替えるにはグループの場合は、orderBy 関数を使用できます:

<br>df.groupBy("user").orderBy(desc("評価"))<br>

これにより、各ユーザー グループの評価列の降順にデータが並べ替えられます。

各グループの上位 N 件のレコードについては、制限関数を使用できます:

<br>df.groupBy("user").orderBy(desc("評価")).limit(n) <br>

n は、必要な上位レコードの数です。または、ウィンドウ関数を使用して各グループ内のレコードをランク​​付けし、そのランクに基づいてフィルタリングすることもできます:

</p>import org.apache.spark。 sql.expressions.Window<p>import org.apache.spark.sql.functions.{rank, desc}<br><br>// ウィンドウ定義</p>val w = Window.partitionBy($"user").orderBy(desc("評価"))<p><br>// フィルター</p>df .withColumn("ランク", ランク.over(w)).where($"ランク" <= n)<p>


同点を気にしない場合は、rank 関数を row_number 関数に置き換えることができることに注意してください。

以上がSpark DataFrame でグループ化された上位 N 集計を効率的に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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