pyspark连接两个表,并且仅当第二个表有一个条目时才更改列值



我有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|
+---+-----+---+

相关内容

  • 没有找到相关文章

最新更新