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

Bagaimana untuk Mendapatkan Item N Teratas bagi setiap Kumpulan dalam Spark DataFrame?

Linda Hamilton
Linda Hamiltonasal
2024-12-23 01:57:15396semak imbas

How to Get the Top N Items per Group in a Spark DataFrame?

Dapatkan N Item Teratas setiap Kumpulan Menggunakan Spark DataFrame GroupBy

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
...

Scala Solution

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)

Pilihan Alternatif

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!

Kenyataan:
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