我有table_1和table_2如下:
table_1
ID name qty
1 ball 34
2 pen 45
5 ham 22
4 van 1
9 phone 200
table_2 with changed_qty
ID name changed_qty
1 ball 70
5 ham 400
9 phone 89
我想基于列['ID', 'name']连接table_1和table_2,这样如果ID和name在第二个表中不可用,那么我想保留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")
合并两列,即将changed_qty中的null替换为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|
+---+-----+---+