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)
Butiran Lanjut :
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)
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!