Heim >Datenbank >MySQL-Tutorial >Wie behalte ich zusätzliche Spalten in Spark DataFrame GroupBy-Operationen bei?

Wie behalte ich zusätzliche Spalten in Spark DataFrame GroupBy-Operationen bei?

Susan Sarandon
Susan SarandonOriginal
2024-12-25 02:11:17559Durchsuche

How to Preserve Additional Columns in Spark DataFrame GroupBy Operations?

Beibehalten zusätzlicher Spalten in Spark DataFrame GroupBy-Vorgängen

In Spark DataFrame GroupBy-Abfragen ist es üblich, nur gruppenbezogene Spalten und Aggregate abzurufen . Es kann jedoch Szenarien geben, in denen Sie beabsichtigen, zusätzliche Spalten über den Gruppenschlüssel und die Ergebnisse der Aggregatfunktion hinaus beizubehalten.

Betrachten Sie die folgende GroupBy-Operation:

df.groupBy(df("age")).agg(Map("id" -> "count"))

Diese Abfrage gibt einen DataFrame mit zurück nur zwei Spalten: „Alter“ und „Anzahl(ID)“. Wenn Sie zusätzliche Spalten aus dem ursprünglichen DataFrame benötigen, z. B. „Name“, können Sie mehrere Ansätze verwenden.

Ansatz 1: Aggregierte Ergebnisse mit Originaltabelle verbinden

Einer Methode besteht darin, den DataFrame mit den aggregierten Ergebnissen zu verknüpfen, um die fehlenden Spalten abzurufen. Zum Beispiel:

val agg = df.groupBy(df("age")).agg(Map("id" -> "count"))
val result = df.join(agg, df("age") === agg("age"))

Diese Technik behält alle Spalten des ursprünglichen DataFrame bei, kann aber bei großen Datensätzen weniger effizient sein.

Ansatz 2: Aggregieren mit zusätzlichen Funktionen (Erste/Letzte). )

Sie können auch zusätzliche Aggregatfunktionen wie „first“ oder „last“ verwenden, um nicht gruppierte Spalten in die aggregierten Ergebnisse einzubeziehen. Zum Beispiel:

df.groupBy(df("age")).agg(Map("id" -> "count", "name" -> "first"))

Dies gibt einen DataFrame mit drei Spalten zurück: „Alter“, „Anzahl(ID)“ und „Vorname(Name).“

Ansatz 3: Fensterfunktionen-Where-Filter

In manchen Fällen können Sie Fensterfunktionen in Kombination mit einem Where-Filter nutzen, um das gewünschte Ergebnis zu erzielen. Dieser Ansatz kann jedoch Auswirkungen auf die Leistung haben:

df.select(
  col("name"),
  col("age"),
  count("id").over(Window.partitionBy("age").rowsBetween(Window.unboundedPreceding, Window.currentRow))
).where(col("name").isNotNull)

Durch den Einsatz dieser Techniken können Sie beim Durchführen von GroupBy-Vorgängen in Spark DataFrames effektiv zusätzliche Spalten beibehalten und so verschiedenen analytischen Anforderungen gerecht werden.

Das obige ist der detaillierte Inhalt vonWie behalte ich zusätzliche Spalten in Spark DataFrame GroupBy-Operationen bei?. 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