#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)