Heim > Datenbank > MySQL-Tutorial > Wie erhalte ich die Top-N-Elemente pro Gruppe in einem Spark-DataFrame?

Wie erhalte ich die Top-N-Elemente pro Gruppe in einem Spark-DataFrame?

Linda Hamilton
Freigeben: 2024-12-23 01:57:15
Original
385 Leute haben es durchsucht

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

Erhalten Sie die Top-N-Elemente pro Gruppe mit Spark DataFrame GroupBy

Bei Spark-DataFrame-Vorgängen müssen Sie möglicherweise Daten nach einer bestimmten Spalte gruppieren und die Top-N-Elemente abrufen Elemente innerhalb jeder Gruppe. Dieser Artikel zeigt anhand eines Python-Beispiels, wie Sie dies mithilfe von Scala erreichen.

Betrachten Sie den bereitgestellten DataFrame:

user1 item1 rating1
user1 item2 rating2
user1 item3 rating3
user2 item1 rating4
...
Nach dem Login kopieren

Scala-Lösung

Um die Top-N-Elemente abzurufen Für jede Benutzergruppe können Sie eine Fensterfunktion in Verbindung mit den Vorgängen „orderBy“ und „where“ nutzen. Hier ist die Implementierung:

// 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)
Nach dem Login kopieren

Alternative Option

Wenn Gleichstände kein Problem darstellen, können Sie den Rang durch row_number ersetzen:

val topNDF = rankedDF.withColumn("row_num", row_number.over(w)).where($"row_num" <= n)
Nach dem Login kopieren

Mit diesem Ansatz können Sie kann die Top-N-Elemente für jede Benutzergruppe in Ihrem DataFrame effizient abrufen.

Das obige ist der detaillierte Inhalt vonWie erhalte ich die Top-N-Elemente pro Gruppe in einem Spark-DataFrame?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage