Agregacje
Grupowanie i agregowanie
Agregacje to bezpłatna lekcja Scala for Backend Engineering & Functional Programming na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Scala for Backend Engineering & Functional Programming, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.
Po co agregować?
Agregacje podsumowują wiele wierszy, tworząc ich mniejszą liczbę: sumy, średnie i liczności w grupach. W Spark są to operacje szerokie, które mogą wymagać przetasowania danych w całym klastrze.
Agregacje globalne
Oblicz pojedyncze podsumowanie dla całego DataFrame za pomocą agg i funkcji takich jak count, sum, avg, min, max.
import org.apache.spark.sql.functions._
df.agg(
count("*").as("rows"),
avg("age").as("avg_age")
).show()groupBy
groupBy dzieli wiersze według jednej lub większej liczby kolumn, tworząc obiekt RelationalGroupedDataset gotowy do agregacji.
import org.apache.spark.sql.functions._
val byCity = df.groupBy("city").agg(count("*").as("people"))
byCity.show()Wiele agregacji
Przekaż do agg kilka wyrażeń agregujących, aby obliczyć wiele podsumowań dla każdej grupy w jednym przebiegu.
import org.apache.spark.sql.functions._
df.groupBy("department").agg(
sum("salary").as("total"),
avg("salary").as("avg"),
max("salary").as("top")
).show()Zliczanie wartości unikatowych
Użyj countDistinct, aby zliczyć unikatowe wartości, a approx_count_distinct, aby szybciej uzyskać przybliżoną liczbę dla ogromnych zbiorów danych.
import org.apache.spark.sql.functions._
df.agg(countDistinct("city").as("unique_cities")).show()Filtrowanie grup za pomocą having
W języku SQL HAVING filtruje zagregowane grupy. W DSL zastosuj filter po agg, filtrując według obliczonej kolumny.
import org.apache.spark.sql.functions._
df.groupBy("city")
.agg(count("*").as("n"))
.filter(col("n") > 100)
.show()Agregowanie w SQL
Ta sama logika co w zapytaniu SQL względem zarejestrowanego widoku, z użyciem GROUP BY i HAVING.
df.createOrReplaceTempView("people")
spark.sql(
"SELECT city, COUNT(*) AS n FROM people GROUP BY city HAVING COUNT(*) > 100"
).show()Tabele przestawne
pivot zamienia różne wartości kolumny na osobne kolumny — przydatne w tabelach krzyżowych, takich jak sprzedaż według regionu i kwartału.
import org.apache.spark.sql.functions._
sales.groupBy("region")
.pivot("quarter")
.agg(sum("amount"))
.show()Funkcje okna
Funkcje okna wykonują agregację w przesuwanej ramce bez scalania wierszy — doskonale nadają się do sum narastających lub rankingów.
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
val w = Window.partitionBy("dept").orderBy(col("salary").desc)
df.withColumn("rank", rank().over(w)).show()Agregacje RDD
Na poziomie RDD funkcje aggregateByKey i reduceByKey łączą wartości według klucza, korzystając z niestandardowej logiki oraz lokalnego łączenia wstępnego dla większej wydajności.
val pairs = sc.parallelize(Seq(("a", 10), ("a", 20), ("b", 5)))
val sums = pairs.reduceByKey(_ + _)
// (a, 30), (b, 5)Prosty odpowiednik groupBy w Scali
Samodzielny odpowiednik: groupBy kolekcji w Scali wraz z mapValues odwzorowuje grupowanie i agregowanie w Spark.
object Main {
def main(args: Array[String]): Unit = {
val data = Seq(("a", 10), ("a", 20), ("b", 5))
val sums = data.groupBy(_._1).map { case (k, v) => k -> v.map(_._2).sum }
sums.toSeq.sortBy(_._1).foreach { case (k, s) => println(s"$k: $s") }
}
}Szybkie sprawdzenie
Która funkcja agreguje ramkę wierszy bez scalania ich do jednego wiersza na grupę?
Podsumowanie
Uczestnik agregował dane w Spark:
aggz funkcjamicount,sum,avg,min,maxgroupBy, wiele agregacji i filtryhavingpivoti funkcje okna- RDD
reduceByKey/aggregateByKey
Ukończono kurs Apache Spark.
Często zadawane pytania
Czy lekcja „Agregacje” jest bezpłatna?
Tak — pełny tekst „Agregacje” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Scala for Backend Engineering & Functional Programming, przejdź na CoddyKit PRO. Kurs Scala for Backend Engineering & Functional Programming zawiera 4 lekcji w sumie.
Co nauczysz się w „Agregacje”?
Grupowanie i agregowanie Ćwiczysz Scala for Backend Engineering & Functional Programming z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Scala for Backend Engineering & Functional Programming?
Nie wymagamy żadnego doświadczenia. Scala for Backend Engineering & Functional Programming w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Agregacje”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Scala for Backend Engineering & Functional Programming?
Tak. Każda lekcja Scala for Backend Engineering & Functional Programming zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.