首页 > 解决方案 > 用 pyspark df 中的新元素填充空值

问题描述

我正在尝试找到一种方法来加入两个具有一定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,而DF2uuid关联。所以func()实际上会生成一个 uuid 并用 distinct 填充colNamedistinct uuid。对此的任何方法将不胜感激。提前致谢。

标签: pandasdataframeapache-sparkpysparkapache-spark-sql

解决方案


您可以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|
+-------+------------------------------------+

推荐阅读