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