Fala galera do mundo dos dados, hoje é dia de aprender as funções groupby, agg e union no Spark. Dando continuidade a série Fluxo de Dados com Spark! Chegou a hora de aprender mais algumas funções do Spark. Agora pensando em manipulação de dados para, juntar, transformar e agregar bases de dados.
Sendo assim, iremos apresentar como realizar essas operações com Spark. Para começar iremos agrupar dados. Sem mais enrolações, partiu à prática com Dados ao Cubo.
Agrupar Dataframe com o Spark
Primeiramente, temos que conhecer a origem dos dados. Aqui temos um arquivo de carros com nome de cars.json, com nome, modelo, consumo, origem e mais algumas informações.
![](https://dadosaocubo.com/wp-content/uploads/2024/01/image-16-1024x372.png)
Então é hora de aprender a aplicar o groupby com Spark.
GroupBy Spark
A função global é utilizada para agregar os dados e junto com ela utilizamos algum agregador de contagem, soma, média, mediana e assim conseguimos extrair informações importantes sobre o conjunto de dados. Agora iremos criar um código Python que irá fazer a contagem de carros por marca.
No código a seguir, a função groupBy está agrupando o df_cars pela coluna brand (marca de carros).Em seguida usamos o método count, este método conta o número de ocorrências em cada grupo formado pela coluna brand. Finalizamos com o método show, que exibe o resultado na tela. Ele imprime na tela o DataFrame resultante da contagem.
from pyspark.sql import SparkSession, functions as f if __name__ == __main__: spark = SparkSession.builder.getOrCreate() df_cars = spark.read.json(cars.json) df_cars.groupBy(brand).count().show()
Portanto, esse código em PySpark está agrupando os carros pelo fabricante (coluna brand), contando quantos carros existem para cada fabricante e, em seguida, mostrando esse resultado na tela, conforme imagem abaixo.
![](https://dadosaocubo.com/wp-content/uploads/2024/01/image-17-1024x291.png)
Para conjuntos de dados pequenos fica fácil de identificar as maiores e menores contagens, o que não é simples para conjunto de dados muito grandes. Sendo assim, podemos aplicar uma ordenação no conjunto de dados de forma crescente ou decrescente de acordo com a necessidade. assim, aplicamos a função orderBy, que é utilizada para ordenar os dados a partir de uma coluna, como no código Python abaixo onde ordenando de forma decrescente pela coluna count.
df_cars.groupBy(brand).count().orderBy(f.desc(count)).show()
E então, temos a nossa contagem apresentada de uma forma ordenada, como na imagem abaixo.
![](https://dadosaocubo.com/wp-content/uploads/2024/01/image-18-1024x296.png)
Podemos ainda, incrementar ainda mais o agrupamento de dados aplicando de uma só vez várias medidas de agregação
Agg Spark
Como vimos no tópico anterior, a função groupBy está agrupando agrupando o DataFrame df_cars pela coluna brand (marca de carros). Acrescentando a função agg, este método é usado para agregar funções específicas sobre os grupos formados pelo groupBy. No código Python a seguir, teremos os seguintes agregadores.
- f.count(Horsepower): Conta o número de registros não nulos na coluna Horsepower para cada grupo.
- f.max(Horsepower): Calcula o valor máximo na coluna Horsepower para cada grupo.
- f.min(Horsepower): Calcula o valor mínimo na coluna Horsepower para cada grupo.
- f.avg(Horsepower): Calcula a média na coluna Horsepower para cada grupo.
Finalizando com a função show para exibir o resultado na tela.
df_cars.groupBy(brand).agg( f.count(Horsepower), f.max(Horsepower), f.min(Horsepower), f.avg(Horsepower), ).show()
Portanto, esse código está agrupando carros pela marca (brand) e calculando várias medidas estatísticas sobre a potência (Horsepower) para cada marca, mostrando o resultado na tela, como na imagem abaixo.
![](https://dadosaocubo.com/wp-content/uploads/2024/01/image-19-1024x290.png)
Ainda podemos melhorar a visualização dos dados, para isso iremos renomear cada coluna utilizando a função alias.
df_cars.groupBy(brand).agg( f.count(Horsepower).alias(count), f.max(Horsepower).alias(max), f.min(Horsepower).alias(min), f.avg(Horsepower).alias(avg), ).show()
E então, temos o resultado da imagem abaixo com as colunas todas renomeadas.
![](https://dadosaocubo.com/wp-content/uploads/2024/01/image-20-1024x292.png)
Após aprender a fazer agrupamento dos dados, chegou a hora de unir mais de um conjunto de dados.
Unir Dataframes com o Spark
Para unir dois DataFrames utilizamos a função Union. Para esta operação, é necessário que tenhamos dois conjuntos de dados com a mesma quantidade de colunas e os tipos de dados iguais para cada coluna. Então faremos a divisão do nosso conjunto de dados de carros utilizando a função Filter e criando um conjunto para marca Audi e outro para marca BMW, confere o código Python abaixo.
df_cars_audi = df_cars.filter(brand = "audi") df_cars_bmw = df_cars.filter(brand = "bmw") df_cars_audi.show() df_cars_bmw.show()
Exibindo na imagem abaixo o df_cars_audi um DataFrame representando carros da marca Audi, e o df_cars_bmw um DataFrame representando carros da marca BMW.
![](https://dadosaocubo.com/wp-content/uploads/2024/01/image-21-1024x292.png)
Usaremos o método union que concatena os DataFrames df_cars_audi e df_cars_bmw.
df_cars_audi.union(df_cars_bmw).show()
Portanto, esse código está unindo os DataFrames df_cars_audi e df_cars_bmw, combinando as linhas de ambos em um único DataFrame. Exibindo na imagem abaixo.
![](https://dadosaocubo.com/wp-content/uploads/2024/01/image-22-1024x291.png)
E assim aprendemos mais algumas funções Spark. Gostou? Quer mais? Confere todo esse passo a passo das funções Spark groupby, agg e union com Spark em vídeo, no canal do Fluxo de Dados!
Funções Spark GroupBy, Agg e Union com o Fluxo de Dados
Esse conteúdo é uma parceria com o canal do Fluxo de Dados, lá você confere as funções Spark groupby, agg, union e muito mais.
E então finalizamos mais um post da série Fluxo de Dados com Spark . Fica ligado nos próximos conteúdos que vai ter toda a continuidade de como trabalhar com Spark. Ao final desta série, você estará pronto para embarcar em suas próprias jornadas analíticas usando PySpark. A capacidade de processar dados em escala e realizar análises complexas torna PySpark uma ferramenta valiosa para profissionais que buscam explorar o potencial máximo do big data.
Conteúdos ao Cubo
Por fim, deixo algumas sugestões de conteúdos que você pode encontrar no Dados ao Cubo, sempre falando sobre o mundo dos dados.
- Boas Práticas de Visualização de Dados Parte I
- Boas Práticas de Visualização de Dados Parte II
- Regressão com scikit-learn
- Engenharia de Atributos AKA Feature Engineering Parte I
- Engenharia de Atributos AKA Feature Engineering Parte II
- O Guia do XGBoost com Python
- Análise de Dados com Numpy Python
- Visualizar Dados do PostgreSQL no Metabase
Finalizo com um convite para você ser Parceiro de Publicação Dados ao Cubo e escrever o próximo artigo, compartilhando conhecimento para toda a comunidade de dados. Não esqueça de assinar a nossa Newsletter para ficar por dentro de todas as novidades.
![](https://dadosaocubo.com/wp-content/uploads/2023/12/ft.jpg)
Apaixonado por dados e tecnologia ❤️ , criando soluções com dados 📊 📈 , desde 2015, sempre buscando tornar os processos orientados! Com formação em Engenharia da Computação 💾 , MBA Gestão da Informação e Business Intelligence e Especialização em Data Science.
Também atuo como professor na área de dados. Nas horas vagas crio modelos de Machine Learning 🤖 com Python em desafios do Kaggle e escrevo no Dados ao Cubo sobre o mundo dos dados 🎲 !
Compartilhando conhecimentos sempre 🚀