Heim >Datenbank >MySQL-Tutorial >Wie kann ich beim Gruppieren in einem Spark-DataFrame andere Spalten beibehalten?

Wie kann ich beim Gruppieren in einem Spark-DataFrame andere Spalten beibehalten?

Barbara Streisand
Barbara StreisandOriginal
2024-12-21 01:01:09489Durchsuche

How Can I Keep Other Columns When Grouping in a Spark DataFrame?

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!

Stellungnahme:
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