Agregação e Agrupamento em Python
Deslize para mostrar o menu
Agregação é o processo de resumir várias linhas de dados em um único valor significativo, como soma, média ou contagem. Agrupamento permite aplicar esses resumos em categorias específicas, como encontrar o total de vendas para cada região distinta.
Raramente é necessário analisar milhões de linhas individuais de dados brutos. Normalmente, o objetivo é obter uma visão geral — totais, médias ou contagens por categoria. No Spark, isso pode ser alcançado combinando dois métodos poderosos: groupBy() e agg().
O padrão básico do groupBy
Para resumir dados por uma categoria específica, primeiro utiliza-se o método groupBy(). Isso instrui o Spark a reunir todas as linhas que compartilham o mesmo valor (como "cut" na tabela diamonds) em um grupo. No entanto, o agrupamento por si só não faz nada; é necessário segui-lo com uma agregação.
# Group by cut and count how many rows are in each
count_df = df.groupBy("cut").count()
display(count_df)
Realizando operações matemáticas com sum(), avg() e max()
Após agrupar seus dados, é possível aplicar funções matemáticas às colunas numéricas. Para visualizar o lucro total por tipo de item, utilize .sum().
# Total total_depth per cut category
total_depth = df.groupBy("cut").sum("x")
display(total_depth)
Observe que o Spark renomeia automaticamente a coluna para sum(x). No próximo capítulo, aprenderemos como tornar esses nomes mais profissionais.
O método agg() para múltiplas métricas
Quando for necessário calcular mais de uma métrica ao mesmo tempo—por exemplo, tanto o lucro médio quanto a receita máxima para cada região—utiliza-se o método .agg() (aggregate). Este é o padrão profissional para construir resumos complexos.
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)
Importação de pyspark.sql.functions as F para acessar essas ferramentas matemáticas avançadas.
Agrupamento por Múltiplas Colunas
Não há limitação ao agrupar por apenas uma categoria. É possível passar uma lista de colunas para visualizar os dados em um nível mais detalhado, como o total de x para cada Color Type dentro de cada Cut.
multi_group_df = df.groupBy("cut", "color").sum("x")
display(multi_group_df)
Ordenando os Resultados
Dados agregados geralmente são mais fáceis de ler quando estão ordenados. É possível encadear o método .orderBy() ao final da agregação para visualizar as categorias de melhor desempenho no topo da lista.
# Show highest profit categories first
sorted_df = summary_df.orderBy("sum(x)", ascending=False)
display(sorted_df)
1. Qual método deve ser chamado ANTES de aplicar um sum() ou avg() se você deseja que os resultados sejam divididos por categoria?
2. Qual é o benefício de usar o método .agg() em vez de apenas .sum()?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo