Heim >Datenbank >MySQL-Tutorial >Wie rufe ich mit Scala die Top-N-Elemente pro Benutzergruppe in einem Spark SQL DataFrame ab?
Problem:
Gegeben ist ein Spark SQL DataFrame mit Spalten, die Benutzer darstellen , Artikel und Benutzerbewertungen, wie können wir nach Benutzer gruppieren und dann die Top-N-Artikel für jede Gruppe abrufen? Scala?
Antwort:
Um dies zu erreichen, können wir die Rangfensterfunktion wie folgt nutzen:
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)
Weitere Details :
Wenn Sie lieber die Funktion row_number verwenden möchten, die fortlaufende Zeilennummern anstelle von Rängen zuweist (Gleichstände ignorieren), können Sie rank durch row_number in der Fensterdefinition ersetzen:
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)
Das obige ist der detaillierte Inhalt vonWie rufe ich mit Scala die Top-N-Elemente pro Benutzergruppe in einem Spark SQL DataFrame ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!