Pyspark 数据框使用默认值左连接

Posted

技术标签:

【中文标题】Pyspark 数据框使用默认值左连接【英文标题】:Pyspark dataframe left join with default values 【发布时间】:2020-01-30 03:30:39 【问题描述】:

我有两个数据框 df1 和 df2。我正在尝试加入(左加入)

df1:

Name     ID       Age
AA       1        23
BB       2        49
CC       3        76
DD       4        27
EE       5        43
FF       6        34
GG       7        65

df2:

ID      Place
1       Germany
3       Holland
7       India

Final = df1.join(df2, on=['ID'], how='left')

    Name     ID       Age    Place
    AA       1        23     Germany
    BB       2        49     null
    CC       3        76     Holland
    DD       4        27     null
    EE       5        43     null
    FF       6        34     null
    GG       7        65     India

但如果place 值为空,我想用Name 列值填充Place

预期输出:

    Name     ID       Age    Place
    AA       1        23     Germany
    BB       2        49     BB
    CC       3        76     Holland
    DD       4        27     DD
    EE       5        43     EE
    FF       6        34     FF
    GG       7        65     India

我能想到的解决方案是,一旦join完成,我可以检查Place的值,如果为null,则替换为Name。请让我知道是否有任何其他优雅的解决方案。谢谢。

【问题讨论】:

试试这个:final = df1.merge(df2,on='ID',how='left').assign(Place=lambda x: x['Place'].fillna(x['Name'])) 对不起,我忘了提到我正在尝试在 pyspark 数据框中执行此操作。 mergeassign 不适用于 pyspark 数据框。谢谢。 【参考方案1】:

是的,谢谢。经过一些搜索设法使用如下链接所示

from pyspark.sql.functions import coalesce
df1.withColumn("Place",coalesce(df1.Place,df.Name)) 

Another thread

【讨论】:

以上是关于Pyspark 数据框使用默认值左连接的主要内容,如果未能解决你的问题,请参考以下文章

Spark数据框左连接应在右侧添加默认行而不是null的连接

如何将数据框中的连接值插入到 Pyspark 中的另一个数据框中?

如何获取和比较pyspark中两个数据框中相似列的所有值的数据类型

PySpark - 如何使用连接更新 Dataframe?

PySpark 按最接近的时间值连接两个数据帧

在 pyspark 的 Scala UDF 中使用默认参数值?