Aggregation und Gruppierung in Python
Swipe um das Menü anzuzeigen
Aggregation ist der Prozess, bei dem mehrere Datenzeilen zu einem einzigen aussagekräftigen Wert zusammengefasst werden, wie zum Beispiel Summe, Durchschnitt oder Anzahl. Gruppierung ermöglicht es, diese Zusammenfassungen auf bestimmte Kategorien anzuwenden, beispielsweise um den Gesamtumsatz für jede einzelne Region zu ermitteln.
Selten ist es notwendig, Millionen einzelner Rohdatenzeilen zu betrachten. In der Regel interessiert das "große Ganze" – Summen, Durchschnitte oder Anzahlen pro Kategorie. In Spark lässt sich dies durch die Kombination zweier leistungsstarker Methoden erreichen: groupBy() und agg().
Das grundlegende groupBy-Muster
Um Daten nach einer bestimmten Kategorie zusammenzufassen, wird zunächst die Methode groupBy() verwendet. Diese weist Spark an, alle Zeilen mit demselben Wert (wie "cut" in der diamonds-Tabelle) zu einer Gruppe zusammenzufassen. Das reine Gruppieren bewirkt jedoch noch nichts; es muss eine Aggregation folgen.
# Group by cut and count how many rows are in each
count_df = df.groupBy("cut").count()
display(count_df)
Mathematische Operationen mit sum(), avg() und max()
Nach dem Gruppieren der Daten können mathematische Funktionen auf numerische Spalten angewendet werden. Um den Gesamtgewinn pro Artikeltyp anzuzeigen, wird .sum() verwendet.
# Total total_depth per cut category
total_depth = df.groupBy("cut").sum("x")
display(total_depth)
Beachte, dass Spark die Spalte automatisch in sum(x) umbenennt. Im nächsten Kapitel lernen wir, wie diese Namen professioneller gestaltet werden können.
Die agg()-Methode für mehrere Kennzahlen
Wenn mehrere Kennzahlen gleichzeitig berechnet werden sollen – zum Beispiel sowohl der durchschnittliche Gewinn als auch der maximale Umsatz für jede Region – wird die .agg()-Methode (Aggregate) verwendet. Dies ist der professionelle Standard für die Erstellung komplexer Zusammenfassungen.
from pyspark.sql import functions as F
# Calculate multiple metrics at once
summary_df = df.groupBy("cut").agg(
F.sum("x"),
F.avg("y"),
F.max("z")
)
display(summary_df)
Wir importieren pyspark.sql.functions as F, um Zugriff auf diese leistungsstarken mathematischen Werkzeuge zu erhalten.
Gruppierung nach mehreren Spalten
Die Gruppierung ist nicht auf eine Kategorie beschränkt. Es kann eine Liste von Spalten übergeben werden, um Daten auf einer detaillierteren Ebene zu betrachten, beispielsweise die Gesamtsumme von x für jeden Farbtyp innerhalb jedes Schliffs.
multi_group_df = df.groupBy("cut", "color").sum("x")
display(multi_group_df)
Sortieren der Ergebnisse
Aggregierte Daten sind oft leichter lesbar, wenn sie sortiert sind. Die Methode .orderBy() kann am Ende der Aggregation angehängt werden, um die leistungsstärksten Kategorien oben in der Liste anzuzeigen.
# Show highest profit categories first
sorted_df = summary_df.orderBy("sum(x)", ascending=False)
display(sorted_df)
1. Welche Methode muss VOR der Anwendung von sum() oder avg() aufgerufen werden, wenn die Ergebnisse nach Kategorie aufgeschlüsselt werden sollen?
2. Was ist der Vorteil der Verwendung der .agg()-Methode anstelle von nur .sum()?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen