Соедините две таблицы и объедините столбцы с помощью Pyspark (базы данных)

#dataframe #apache-spark #pyspark

Вопрос:

У меня в базе данных есть две таблицы. Мне нужно выполнить левое внешнее соединение для этих двух таблиц с условием table1.id = table2.id кроме того, источник должен соответствовать

Ниже приведены мои две исходные таблицы.

Таблица 1 :

 `source    id        type `

  eu2   10000162      N4    
  sus   10000162      M1    
  pda   10000162      XM 
 

Таблица 2 :

 `source   id         code1        code2`

  eu2   10000162        CDNG_GRP     PROB_CD
  sus   10000162        AANV          NW
  pda   10000162        PM2          VLPD
 

Ожидаемый результат :

source id type concat

   eu2   10000162      N4    CDNG_GRP-PROB_CD
  sus   10000162      M1    AANV-NW
  pda   10000162      XM    PM2-VLPD
 

Я хочу, чтобы этот результат был в кадре данных.

Заранее спасибо!

Ответ №1:

Spark всегда возвращает фрейм данных (до тех пор, пока не будет указано, что этого делать не следует)

Попробуйте это: учитывая, что ваши таблицы уже являются фреймом данных spark

 left_join = table1.join(table2, table1.id==table1.id, "leftouter")
left_join.show()
 

Ответ №2:

Чтобы получить желаемый результат, вам необходимо выполнить объединение столбцов source и. id

 import pyspark.sql.functions as F
...
df = df1.join(df2, on=['id', 'source'], how='left') 
    .withColumn('concat', F.concat('code1', F.lit('-'), 'code2')) 
    .select(['source', 'id', 'type', 'concat'])
df.show(truncate=False)