在 pyspark df 中使用新元素填充空值



我正在尝试找到一种方法来连接两个具有某种colName共同点的 df,并使用新值填充nullfunc()

我有两个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,而DF2uuid关联。因此,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|
+-------+------------------------------------+

最新更新