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 数据框中执行此操作。 merge
和 assign
不适用于 pyspark 数据框。谢谢。
【参考方案1】:
是的,谢谢。经过一些搜索设法使用如下链接所示
from pyspark.sql.functions import coalesce
df1.withColumn("Place",coalesce(df1.Place,df.Name))
Another thread
【讨论】:
以上是关于Pyspark 数据框使用默认值左连接的主要内容,如果未能解决你的问题,请参考以下文章
Spark数据框左连接应在右侧添加默认行而不是null的连接
如何将数据框中的连接值插入到 Pyspark 中的另一个数据框中?