0Pricing
Scala for Backend Engineering & Functional Programming · Lekcja

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:

  • agg z funkcjami count, sum, avg, min, max
  • groupBy, wiele agregacji i filtry having
  • pivot i 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.

Wszystkie lekcje w tym kursie

  1. RDD i DataFrame’y
  2. Przekształcenia i akcje
  3. Spark SQL
  4. Agregacje
← Powrót do Scala for Backend Engineering & Functional Programming