pyspark объединяет 2 таблицы и изменяет значение столбца, только если во 2-й таблице есть запись

#apache-spark #join #pyspark #apache-spark-sql

#apache-spark #Присоединиться #пайспарк #apache-spark-sql

Вопрос:

У меня есть таблица_1 и таблица_2, как показано ниже:

таблица_1

 ID  name   qty
1   ball   34
2   pen    45
5   ham    22
4   van    1
9   phone  200
 

таблица_2 с измененным_qty

 ID  name   changed_qty
1   ball   70
5   ham    400
9   phone  89
 

Я хочу объединить table_1 и table_2 на основе столбцов [‘ID’, ‘name’] таким образом, чтобы, если ID и name недоступны во 2-й таблице, я хотел бы сохранить саму строку table_1. Если ID и name доступны в table_2, то я хочу извлечь столбец qty из второй таблицы.

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

 ID  name   qty
1   ball   70
2   pen    45
5   ham    400
4   van    1
9   phone  89
 

Обычное левое соединение не дало бы мне ожидаемых результатов.

 df_final = df_table_1.join(df_table_2, ['ID', 'name'], how="left")
 

Ответ №1:

Объединить два столбца, т.е. заменить нули в changed_qty на qty:

 import pyspark.sql.functions as F

final = table1.join(table2, ['ID', 'name'], 'left').select('ID', 'name', F.coalesce('changed_qty', 'qty').alias('qty'))

final.show()
 --- ----- --- 
| ID| name|qty|
 --- ----- --- 
|  1| ball| 70|
|  2|  pen| 45|
|  5|  ham|400|
|  4|  van|  1|
|  9|phone| 89|
 --- ----- ---