Heim >Datenbank >MySQL-Tutorial >Wie kann eine gruppierte Top-N-Aggregation in Spark-DataFrames effizient durchgeführt werden?
So führen Sie eine gruppierte TopN-Aggregation mit Spark DataFrame durch
In Spark SQL können Sie SQL-ähnliche Syntax nutzen, um komplexe Datenmanipulationen durchzuführen. Eine häufige Aufgabe besteht darin, Daten zu gruppieren und die obersten N-Werte aus jeder Gruppe abzurufen. So können Sie dies mit einem Spark-DataFrame erreichen:
Um Daten nach einer bestimmten Spalte zu gruppieren, geben Sie den Spaltennamen in der GROUP BY-Klausel an:
<br>df. groupBy("user")<br>
Um die Ergebnisse innerhalb jeder Gruppe zu sortieren, können Sie orderBy verwenden Funktion:
<br>df.groupBy("user").orderBy(desc("rating"))<br>
Dies wird sortiert die Daten in absteigender Reihenfolge der Bewertungsspalte für jede Benutzergruppe.
Um nur die obersten N Datensätze aus jeder Gruppe abzurufen, können Sie das Limit verwenden Funktion:
<br>df.groupBy("user").orderBy(desc("rating")).limit(n)<br>
Wobei n die gewünschte Anzahl der abzurufenden Top-Datensätze ist.
Alternativ können Sie Fensterfunktionen verwenden, um die Datensätze innerhalb der einzelnen Datensätze zu ordnen gruppieren und dann nach dem Rang filtern:
<br>import org.apache.spark.sql.expressions.Window<br>import org.apache.spark.sql.functions.{rank , desc}</p> <p>// Fensterdefinition<br>val w = Window.partitionBy($"user").orderBy(desc("rating"))</p> <p>// Filter<br>df.withColumn("rank", rank.over(w)).where($ "rank" <= n)<br>
Beachten Sie, dass Sie die Rangfunktion durch ersetzen können, wenn Sie sich nicht für Gleichstände interessieren row_number-Funktion.
Das obige ist der detaillierte Inhalt vonWie kann eine gruppierte Top-N-Aggregation in Spark-DataFrames effizient durchgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!