Aggregering och Gruppering i Python
Svep för att visa menyn
Aggregering är processen att sammanfatta flera rader av data till ett enda meningsfullt värde, såsom summa, medelvärde eller antal. Gruppering gör det möjligt att tillämpa dessa sammanfattningar på specifika kategorier, till exempel att hitta den totala försäljningen för varje enskild region.
Sällan behöver du titta på miljontals individuella rader av rådata. Vanligtvis vill du förstå "helhetsbilden" – totaler, medelvärden eller antal per kategori. I Spark kan du uppnå detta genom att kombinera två kraftfulla metoder: groupBy() och agg().
Det grundläggande groupBy-mönstret
För att sammanfatta data efter en specifik kategori använder du först metoden groupBy(). Detta instruerar Spark att samla alla rader som delar samma värde (som "cut" i diamonds-tabellen) i en grupp. Själva gruppering gör dock ingenting; du måste följa upp med en aggregering.
# Group by cut and count how many rows are in each
count_df = df.groupBy("cut").count()
display(count_df)
Utföra matematiska operationer med sum(), avg() och max()
När du har grupperat dina data kan du tillämpa matematiska funktioner på dina numeriska kolumner. Om du vill se den totala vinsten per objekttyp använder du .sum().
# Total total_depth per cut category
total_depth = df.groupBy("cut").sum("x")
display(total_depth)
Observera att Spark automatiskt byter namn på kolumnen till sum(x). I nästa kapitel kommer vi att lära oss hur man gör dessa namn mer professionella.
Metoden agg() för flera mätvärden
Om du behöver beräkna mer än en sak samtidigt—till exempel både genomsnittlig vinst och maximal intäkt för varje region—använder du metoden .agg() (aggregate). Detta är den professionella standarden för att skapa komplexa sammanfattningar.
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)
Vi importerar pyspark.sql.functions as F för att få tillgång till dessa kraftfulla matematiska verktyg.
Gruppering efter flera kolumner
Du är inte begränsad till att gruppera efter endast en kategori. Du kan ange en lista med kolumner för att se data på en mer detaljerad nivå, till exempel det totala x för varje Color Type inom varje Cut.
multi_group_df = df.groupBy("cut", "color").sum("x")
display(multi_group_df)
Sortera resultaten
Aggregerad data är ofta lättare att läsa när den är sorterad. Du kan kedja metoden .orderBy() i slutet av din aggregering för att se dina bäst presterande kategorier överst i listan.
# Show highest profit categories first
sorted_df = summary_df.orderBy("sum(x)", ascending=False)
display(sorted_df)
1. Vilken metod måste du anropa INNAN du använder sum() eller avg() om du vill att resultaten ska delas upp per kategori?
2. Vilken fördel har man av att använda metoden .agg() istället för bara .sum()?
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal