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
540 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!

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