Agregaciones
Agrupe y agregue
Agregaciones es una lección gratuita de Scala for Backend Engineering & Functional Programming en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Scala for Backend Engineering & Functional Programming, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.
¿Por qué agregar?
Las agregaciones resumen muchas filas en menos filas: totales, promedios y recuentos por grupo. En Spark son operaciones amplias que pueden redistribuir datos por el clúster.
Agregaciones globales
Calcule un único resumen de todo el DataFrame con agg y funciones como count, sum, avg, min y max.
import org.apache.spark.sql.functions._
df.agg(
count("*").as("rows"),
avg("age").as("avg_age")
).show()groupBy
groupBy particiona las filas según una o más columnas y produce un RelationalGroupedDataset listo para la agregación.
import org.apache.spark.sql.functions._
val byCity = df.groupBy("city").agg(count("*").as("people"))
byCity.show()Varias agregaciones
Pase varias expresiones de agregación a agg para calcular varios resúmenes por grupo en una sola pasada.
import org.apache.spark.sql.functions._
df.groupBy("department").agg(
sum("salary").as("total"),
avg("salary").as("avg"),
max("salary").as("top")
).show()Recuento de valores distintos
Use countDistinct para contar valores únicos y approx_count_distinct para obtener un recuento aproximado más rápido en conjuntos de datos enormes.
import org.apache.spark.sql.functions._
df.agg(countDistinct("city").as("unique_cities")).show()Filtrado de grupos con having
En SQL, HAVING filtra los grupos agregados. En el DSL, aplique filter después de agg sobre la columna calculada.
import org.apache.spark.sql.functions._
df.groupBy("city")
.agg(count("*").as("n"))
.filter(col("n") > 100)
.show()Agregación en SQL
La misma lógica que una consulta SQL sobre una vista registrada, mediante GROUP BY y HAVING.
df.createOrReplaceTempView("people")
spark.sql(
"SELECT city, COUNT(*) AS n FROM people GROUP BY city HAVING COUNT(*) > 100"
).show()Tablas dinámicas
pivot convierte los valores distintos de una columna en columnas separadas; resulta útil para tablas de contingencia, como las ventas por región y trimestre.
import org.apache.spark.sql.functions._
sales.groupBy("region")
.pivot("quarter")
.agg(sum("amount"))
.show()Funciones de ventana
Las funciones de ventana agregan datos sobre un marco deslizante sin combinar las filas; son perfectas para totales acumulados o clasificaciones.
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()Agregaciones de RDD
En el nivel de RDD, aggregateByKey y reduceByKey combinan valores por clave con lógica personalizada y una combinación local previa para mejorar la eficiencia.
val pairs = sc.parallelize(Seq(("a", 10), ("a", 20), ("b", 5)))
val sums = pairs.reduceByKey(_ + _)
// (a, 30), (b, 5)groupBy en Scala puro
Un equivalente autocontenido: el groupBy de las colecciones de Scala junto con mapValues refleja una operación de agrupación y agregación de 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") }
}
}Comprobación rápida
¿Qué función agrega datos sobre un marco de filas sin combinarlas en una sola fila por grupo?
Resumen
Ha agregado datos en Spark:
aggconcount,sum,avg,minymaxgroupBy, varias agregaciones y filtroshavingpivoty funciones de ventanareduceByKey/aggregateByKeyde RDD
Ha completado el curso de Apache Spark.
Preguntas frecuentes
¿La lección «Agregaciones» es gratis?
Sí — el texto completo de «Agregaciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Scala for Backend Engineering & Functional Programming, actualiza a CoddyKit PRO. El curso de Scala for Backend Engineering & Functional Programming incluye 4 lecciones en total.
¿Qué aprenderé en «Agregaciones»?
Agrupe y agregue Practicas Scala for Backend Engineering & Functional Programming con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Scala for Backend Engineering & Functional Programming?
No se requiere experiencia previa. Scala for Backend Engineering & Functional Programming en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Agregaciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Scala for Backend Engineering & Functional Programming?
Sí. Cada lección de Scala for Backend Engineering & Functional Programming incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.