Data Analytics Data Engineering Python

Aprender as Funções Spark GroupBy, Agg e Union

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.

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.

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.

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.

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. 

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.

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.

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.

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.

Gostou? Compartilhe!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *