ホームページ >データベース >mysql チュートリアル >Scala を使用して Spark SQL データフレーム内のユーザー グループごとに上位 N 項目を取得する方法

Scala を使用して Spark SQL データフレーム内のユーザー グループごとに上位 N 項目を取得する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-22 04:58:17455ブラウズ

How to Retrieve Top N Items per User Group in a Spark SQL DataFrame using Scala?

Spark SQL DataFrame でグループ化されたデータの TopN を生成する

問題:

ユーザーを表す列を持つ 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)

詳細:

  • ランク関数は、各ユーザー グループ内の各アイテムにランクを付け、最も評価の高いアイテムにランク 1 が与えられます。
  • w ウィンドウ仕様は、データフレームをユーザーごとに分割し、データを評価の降順に並べることによってランキングの範囲を定義します。 .
  • withRank データフレームには、フィルタリングに使用できる「ランク」列が含まれるようになりました。
  • topNPerUser データフレームには、各ユーザーの評価に基づいて、各ユーザーの上位 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 サイトの他の関連記事を参照してください。

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