我正在尝试找到一种方法来连接两个具有某种colName
共同点的 df,并使用新值填充null
值func()
我有两个DF
DF1:
+---------------+
| colName|
+---------------+
| a|
| b|
| c|
| d|
+---------------+
和DF2:
+-------+-------------+
|colName| uuid|
+-------+-------------+
| a| 1|
| b| 2|
+-------+-------------+
使用特定的 pyspark 函数(如DF1.join(DF2, where(DF1.colName == DF2.colName))
或df.merge()
)后,我想获得具有以下值的 df
DF1 + DF2:
+-------+-------------+
|colName| uuid|
+-------+-------------+
| a| 1|
| b| 2|
| c| null|
| d| null|
+-------+-------------+
然后使用func()
:
def func():
doSomethin(DF1+DF2)
预期结果如下:
+-------+-------------+
|colName| uuid|
+-------+-------------+
| a| 1|
| b| 2|
| c| 3|
| d| 4|
+-------+-------------+
如您所见,DF1
只有colName
,而DF2
uuid
关联。因此,func()
实际上会生成一个uuid,并用不同的uuid
填充不同的colName
。对此采取任何办法将不胜感激。提前谢谢。
您可以使用uuid
函数简单地执行此操作。
import pyspark.sql.functions as f
df1.join(df2, ['colName'], 'left')
.withColumn('uuid', f.coalesce(f.col('uuid'), f.expr('uuid()')))
.show(10, False)
+-------+------------------------------------+
|colName|uuid |
+-------+------------------------------------+
|a |1 |
|b |2 |
|c |ad037b01-4be8-40f2-99fc-b7589b2c648c|
|d |e59c9315-b626-4dcf-a80a-e16f08f19a96|
+-------+------------------------------------+