Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Item N Teratas bagi setiap Kumpulan dalam Spark DataFrame?
Dalam operasi Spark DataFrame, anda mungkin menghadapi keperluan untuk mengumpulkan data mengikut lajur tertentu dan mendapatkan N teratas item dalam setiap kumpulan. Artikel ini menunjukkan cara untuk mencapai ini menggunakan Scala, berinspirasi daripada contoh Python.
Pertimbangkan DataFrame yang disediakan:
user1 item1 rating1 user1 item2 rating2 user1 item3 rating3 user2 item1 rating4 ...
Untuk mendapatkan N item teratas untuk setiap kumpulan pengguna, anda boleh memanfaatkan fungsi tetingkap bersama dengan operasi orderBy dan where. Berikut ialah pelaksanaannya:
// Import required functions and classes import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions.{rank, desc} // Specify the number of desired top N items val n: Int = ??? // Define the window definition for ranking val w = Window.partitionBy($"user").orderBy(desc("rating")) // Calculate the rank within each group using the rank function val rankedDF = df.withColumn("rank", rank.over(w)) // Filter the DataFrame to select only the top N items val topNDF = rankedDF.where($"rank" <= n)
Jika ikatan tidak membimbangkan, anda boleh menggantikan pangkat dengan row_number:
val topNDF = rankedDF.withColumn("row_num", row_number.over(w)).where($"row_num" <= n)
Dengan menggunakan pendekatan ini, anda boleh mendapatkan semula item N teratas untuk setiap kumpulan pengguna dalam DataFrame anda dengan cekap.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Item N Teratas bagi setiap Kumpulan dalam Spark DataFrame?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!