Agregações
Agrupe e agregue.
Agregações é uma aula grátis de Scala for Backend Engineering & Functional Programming no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Scala for Backend Engineering & Functional Programming, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Scala for Backend Engineering & Functional Programming inclui 4 aulas no total.
Por que Agregar?
Agregações resumem muitas linhas em menos linhas: totais, médias e contagens por grupo. No Spark, são operações amplas que podem embaralhar dados entre os nós do cluster.
Agregações Globais
Calcule um único resumo sobre todo o DataFrame com agg e funções como count, sum, avg, min e max.
import org.apache.spark.sql.functions._
df.agg(
count("*").as("rows"),
avg("age").as("avg_age")
).show()groupBy
groupBy particiona as linhas por uma ou mais colunas, produzindo um RelationalGroupedDataset pronto para agregação.
import org.apache.spark.sql.functions._
val byCity = df.groupBy("city").agg(count("*").as("people"))
byCity.show()Várias Agregações
Passe várias expressões de agregação para agg a fim de calcular vários resumos por grupo em uma única passagem.
import org.apache.spark.sql.functions._
df.groupBy("department").agg(
sum("salary").as("total"),
avg("salary").as("avg"),
max("salary").as("top")
).show()Contando Valores Distintos
Use countDistinct para contar valores únicos e approx_count_distinct para obter uma contagem aproximada mais rápida em conjuntos de dados enormes.
import org.apache.spark.sql.functions._
df.agg(countDistinct("city").as("unique_cities")).show()Filtrando Grupos com having
Em SQL, HAVING filtra grupos agregados. Na DSL, aplique um filter depois de agg à coluna calculada.
import org.apache.spark.sql.functions._
df.groupBy("city")
.agg(count("*").as("n"))
.filter(col("n") > 100)
.show()Agregando em SQL
A mesma lógica de uma consulta SQL sobre uma visualização registrada, usando GROUP BY e HAVING.
df.createOrReplaceTempView("people")
spark.sql(
"SELECT city, COUNT(*) AS n FROM people GROUP BY city HAVING COUNT(*) > 100"
).show()Tabelas Dinâmicas
pivot transforma os valores distintos de uma coluna em colunas separadas — útil para tabelas cruzadas, como vendas por região e trimestre.
import org.apache.spark.sql.functions._
sales.groupBy("region")
.pivot("quarter")
.agg(sum("amount"))
.show()Funções de Janela
As funções de janela agregam sobre um quadro deslizante sem reduzir as linhas — são perfeitas para totais acumulados ou classificações.
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()Agregações de RDD
No nível de RDD, aggregateByKey e reduceByKey combinam valores por chave com lógica personalizada e combinação local prévia para maior eficiência.
val pairs = sc.parallelize(Seq(("a", 10), ("a", 20), ("b", 5)))
val sums = pairs.reduceByKey(_ + _)
// (a, 30), (b, 5)groupBy em Scala Puro
Um análogo independente: o groupBy das coleções de Scala, junto com mapValues, reproduz um agrupamento e uma agregação do 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") }
}
}Verificação Rápida
Qual recurso agrega sobre um quadro de linhas sem reduzi-las a uma linha por grupo?
Recapitulação
Você agregou dados no Spark:
aggcomcount,sum,avg,minemaxgroupBy, várias agregações e filtroshavingpivote funções de janelareduceByKey/aggregateByKeyem RDD
Você concluiu o curso de Apache Spark.
Perguntas Frequentes
A aula “Agregações” é grátis?
Sim — o texto completo de “Agregações” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Scala for Backend Engineering & Functional Programming, atualize para CoddyKit PRO. O curso de Scala for Backend Engineering & Functional Programming inclui 4 aulas no total.
O que vou aprender em “Agregações”?
Agrupe e agregue. Você pratica Scala for Backend Engineering & Functional Programming com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Scala for Backend Engineering & Functional Programming?
Nenhuma experiência prévia é necessária. Scala for Backend Engineering & Functional Programming no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Agregações”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Scala for Backend Engineering & Functional Programming?
Sim. Cada aula de Scala for Backend Engineering & Functional Programming inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.