Agregación y Agrupamiento en Python
Desliza para mostrar el menú
La agregación es el proceso de resumir múltiples filas de datos en un solo valor significativo, como una suma, promedio o conteo. La agrupación permite aplicar estos resúmenes a categorías específicas, como encontrar las ventas totales para cada región distinta.
Rara vez es necesario analizar millones de filas individuales de datos sin procesar. Normalmente, se busca conocer la "visión general": totales, promedios o conteos por categoría. En Spark, esto se puede lograr combinando dos métodos potentes: groupBy() y agg().
El patrón básico de groupBy
Para resumir datos por una categoría específica, primero se utiliza el método groupBy(). Esto indica a Spark que agrupe todas las filas que comparten el mismo valor (como "cut" en la tabla diamonds) en un grupo. Sin embargo, la agrupación por sí sola no realiza ninguna acción; es necesario acompañarla de una agregación.
# Group by cut and count how many rows are in each
count_df = df.groupBy("cut").count()
display(count_df)
Realización de operaciones matemáticas con sum(), avg() y max()
Una vez que los datos están agrupados, es posible aplicar funciones matemáticas a las columnas numéricas. Para ver el beneficio total por tipo de artículo, se utiliza .sum().
# Total total_depth per cut category
total_depth = df.groupBy("cut").sum("x")
display(total_depth)
Observa que Spark renombra automáticamente la columna a sum(x). En el próximo capítulo, aprenderemos cómo hacer que estos nombres sean más profesionales.
El método agg() para múltiples métricas
Si necesitas calcular más de una cosa a la vez—por ejemplo, tanto el beneficio promedio como el ingreso máximo para cada región—utilizas el método .agg() (aggregate). Este es el estándar profesional para construir resúmenes complejos.
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)
Importamos pyspark.sql.functions as F para acceder a estas potentes herramientas matemáticas.
Agrupación por múltiples columnas
No estás limitado a agrupar por solo una categoría. Puedes pasar una lista de columnas para ver los datos a un nivel más detallado, como el total de x para cada Color Type dentro de cada Cut.
multi_group_df = df.groupBy("cut", "color").sum("x")
display(multi_group_df)
Ordenar los resultados
Los datos agregados suelen ser más fáciles de leer cuando están ordenados. Puedes encadenar el método .orderBy() al final de tu agregación para ver las categorías con mejor desempeño en la parte superior de la lista.
# Show highest profit categories first
sorted_df = summary_df.orderBy("sum(x)", ascending=False)
display(sorted_df)
1. ¿Qué método debes llamar ANTES de aplicar un sum() o avg() si deseas que los resultados se desglosen por categoría?
2. ¿Cuál es el beneficio de usar el método .agg() en lugar de solo .sum()?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla