ホームページ >データベース >mysql チュートリアル >Spark DataFrame 内のグループごとに上位 N 項目を効率的に見つけるにはどうすればよいですか?

Spark DataFrame 内のグループごとに上位 N 項目を効率的に見つけるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-25 22:55:17883ブラウズ

How to Efficiently Find the Top N Items per Group in a Spark DataFrame?

Spark DataFrame によるグループ化と TopN

概要:
Spark DataFrame は、データの操作と集計のための強力な機能を提供します。特定の列に基づいてデータをグループ化し、各グループ内で上位 N 値の検索などの操作を実行することは、データ処理における一般的な要件です。

問題ステートメント:
ユーザー、アイテム、評価などの列を含む Spark DataFrame。タスクは、データをユーザーごとにグループ化し、各グループから上位 N 個の項目を返すことです。ここで、N は事前定義された数値です。

解決策:

を使用します。ウィンドウ関数:

Scalaコード:

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.{rank, desc}

val n: Int = ???

// Window definition
val w = Window.partitionBy($"user").orderBy(desc("rating"))

// Filter
df.withColumn("rank", rank.over(w)).where($"rank" <= n)

説明:
このコードは、ウィンドウ関数を利用して、評価列に基づいて各ユーザー グループ内のアイテムを降順にランク付けします。ランク関数は、パーティション内の各行にランクを割り当て、並べ替えられたリスト内での位置を示します。ランク

row_number 関数の使用:

処理する必要がない場合同点の場合 (複数の項目が同じランクを持つ場合)、ランクの代わりに row_number を使用できます。コードは上記と同様ですが、withColumn 式の Rank.over(w) が row_number.over(w) に置き換えられています。

これらのグループ化およびウィンドウ化テクニックを活用することで、上位 N 項目を効率的に見つけることができます。 Spark DataFrame 内の各グループを統合し、データから貴重な洞察を効果的に抽出できるようにします。

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

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