Heim >Datenbank >MySQL-Tutorial >Wie kann ich beim Gruppieren in einem Spark-DataFrame andere Spalten beibehalten?
Andere Spalten beim Gruppieren in Spark DataFrame beibehalten
Beim Durchführen einer DataFrame-Groupby-Operation tritt häufig das Problem auf, dass nur die gruppierten Spalten empfangen werden Spalten und die Aggregatwerte. Dies kann unpraktisch sein, wenn Sie andere Spalten aus dem ursprünglichen DataFrame beibehalten müssen.
Bedenken Sie beispielsweise die folgende Gruppierung:
df.groupBy(df("age")).agg(Map("id" -> "count"))
Dadurch wird ein DataFrame zurückgegeben, der nur das „Alter“ enthält. und „count(id)“-Spalten. Wenn jedoch „name“ und andere Spalten im ursprünglichen DataFrame vorhanden sind, möchten Sie diese möglicherweise in das Ergebnis einbeziehen.
In Standard-SQL kann dies mit der folgenden Abfrage erreicht werden:
select name, age, count(id) from df group by age
Um dieses Verhalten in Spark zu reproduzieren, können Sie die aggregierten Ergebnisse mit der Originaltabelle verknüpfen. Die Schlüsselspalte(n) für den Join sollten mit der/den Groupby-Spalte(n) identisch sein.
Hier ist ein Beispiel mit Spark SQL:
val groupedDf = df.groupBy($"age").agg(count($"id").as("count")) val joinedDf = df.join(groupedDf, Seq("age"), "left")
Das JoinDf enthält nun alle Originalspalten zusammen mit der aggregierten „Anzahl“-Spalte.
Ein anderer Ansatz besteht darin, beliebige Aggregate wie „erste“ oder „letzte“ zu verwenden, um zusätzliche Spalten einzuschließen. Zum Beispiel:
val groupedDf = df.groupBy($"age").agg(first($"name").as("name"), count($"id").as("count"))
Dadurch wird sichergestellt, dass die Spalte „Name“ im aggregierten DataFrame erhalten bleibt.
Während Sie mit diesen Methoden andere Spalten während der Gruppierung abrufen können, ist dies wichtig zu beachten dass solche Abfragen im Allgemeinen nicht genau definiert sind und in verschiedenen Systemen ein unterschiedliches Verhalten aufweisen können.
Das obige ist der detaillierte Inhalt vonWie kann ich beim Gruppieren in einem Spark-DataFrame andere Spalten beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!