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