Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Item N Teratas bagi setiap Kumpulan Pengguna dalam Spark SQL DataFrame menggunakan Scala?

Bagaimana untuk Mendapatkan Item N Teratas bagi setiap Kumpulan Pengguna dalam Spark SQL DataFrame menggunakan Scala?

Linda Hamilton
Lepaskan: 2024-12-22 04:58:17
asal
460 orang telah melayarinya

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

Menjana TopN untuk Data Berkumpulan dalam Spark SQL DataFrame

Masalah:

Diberikan Spark SQL DataFrame dengan lajur yang mewakili pengguna , item dan penilaian pengguna, bagaimana kita boleh mengumpulkan mengikut pengguna dan kemudian mendapatkan N item teratas untuk setiap kumpulan menggunakan Scala?

Jawapan:

Untuk mencapai ini, kita boleh menggunakan fungsi tetingkap pangkat seperti berikut:

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)
Salin selepas log masuk

Butiran Lanjut :

  • Fungsi pangkat memberikan pangkat kepada setiap item dalam setiap kumpulan pengguna, dengan item penilaian tertinggi menerima pangkat 1.
  • Spesifikasi tetingkap w mentakrifkan skop kedudukan dengan membahagikan DataFrame mengikut pengguna dan menyusun data menurun mengikut rating.
  • DataFrame withRank kini termasuk lajur "pangkat", yang boleh digunakan untuk penapisan.
  • topNPerUser DataFrame mengandungi hanya N item teratas untuk setiap pengguna, berdasarkan penilaian mereka.

Jika anda lebih suka menggunakan fungsi row_number, yang memberikan nombor baris berjujukan dan bukannya pangkat (mengabaikan ikatan), anda boleh gantikan pangkat dengan row_number dalam definisi tetingkap:

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)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Item N Teratas bagi setiap Kumpulan Pengguna dalam Spark SQL DataFrame menggunakan Scala?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan