tecnologia | big data | business intelligence | banco de dados

PySpark - Junções (JOIN)

Nesta publicação irei demonstrar como realizar junções (joins) utilizando a linguagem PySpark e fazer um paralelo com o SQL tradicional.

Cria o dataframe 1:
dadosDataframe1 = [
(1, "A")
, (2, "B")
, (3, "C")
, (4, "D")
, (5, "E")]
schemaDataframe1 = ["id", "coluna"]
df1 = spark.createDataFrame(data=dadosDataframe1, schema=schemaDataframe1)
df1.printSchema()
df1.show(truncate=False)

Cria o dataframe 2:
dadosDataframe2 = [
(1, "A")
, (2, "B")
, (3, "D")
, (4, "F")]
schemaDataframe2 = ["id", "coluna"]
df2 = spark.createDataFrame(data=dadosDataframe2, schema=schemaDataframe2)
df2.printSchema()
df2.show(truncate=False)


Inner Join (registros existentes em ambos dataframes):
df1\
.join(df2
, [df1.coluna == df2.coluna]
, how='inner'
)\
.orderBy(
df1.coluna.asc()
)\
.select(
df1.coluna.alias('INNER_JOIN')
)\
.show(10,False)



Left Join (todos os registros do dataframe 1):
df1\
.join(df2
, [df1.coluna == df2.coluna]
, how='left'
)\
.orderBy(
df1.coluna.asc()
)\
.select(
df1.coluna.alias('LEFT_JOIN')
)\
.show(10,False)



Right Join (todos os registros do dataframe 2):
df1\
.join(df2
, [df1.coluna == df2.coluna]
, how='right'
)\
.orderBy(
df2.coluna.asc()
)\
.select(
df2.coluna.alias('RIGHT_JOIN')
)\
.show(10,False)



Full Join (todos os registros de ambos dataframes):
df1\
.join(df2
, [df1.coluna == df2.coluna]
, how='full'
)\
.orderBy(
F.coalesce(df1.coluna, df2.coluna).asc()
)\
.select(
F.coalesce(df1.coluna, df2.coluna).alias('FULL_JOIN')
)\
.show(10,False)



Left Anti Join (registros exclusivos do dataframe 1):
df1\
.join(df2
, [df1.coluna == df2.coluna]
,how='left_anti'
)\
.orderBy(
df1.coluna.asc()
)\
.select(
df1.coluna.alias('LEFT_ANTI')
)\
.show(10,False)



Right Anti Join (registros exclusivos do dataframe 2):
df2\
.join(df1
, [df1.coluna == df2.coluna]
,how='left_anti'
)\
.orderBy(
df2.coluna.asc()
)\
.select(
df2.coluna.alias('RIGHT_ANTI')
)\
.show(10,False)



Full Join Exclusivo (registros exclusivos de cada dataframe):
df1\
.join(df2
, [df1.coluna == df2.coluna]
, how='full'
)\
.where(
(df1.coluna.isNull()) | (df2.coluna.isNull())
) \
.orderBy(
F.coalesce(df1.coluna, df2.coluna).asc()
)\
.select(
F.coalesce(df1.coluna, df2.coluna).alias('FULL_JOIN')
)\
.show(10,False)



Publicações relacionadas:
- PySpark - Criando dataframes;
- Banco de Dados - Junções (JOIN).
Data publicação: 21:37 18/07/2022
Perfil
Olá jovem Padawan, seja bem vindo! Este site foi criado com o intuito de compartilhar um pouco de conhecimento de Tecnologia da Informação, Big Data, Banco de Dados e Business Intelligence.

GitHub  Linkedin  Youtube

"A nova fonte de poder não é o dinheiro na mão de poucos, mas a informação na mão de muitos." (John Naisbitt)


Leandro Sacramento, Todos os direitos reservados - 2012 - 2022