合并两个数据框并从正确的数据框中检索所有信息

西赛

嗨,Stack Overflow社区。我是spark / pyspark的新手,我有这个问题。

假设我有两个数据框(df2是具有很多记录的兴趣数据集,并且df1是一个新的更新)。我想将多个列上的两个数据框(如果可能)连接在一起,并df1存在键匹配时获取更新的信息,否则将df2信息保持原样。

这是我的样本数据集和我的预期输出(df30

df1 = spark.createDataFrame([("a", 4, 'x'), ("b",  3, 'y'), ("c", 4, 'z'), ("d", 4, 'l')], ["C1", "C2", "C3"])
df2 = spark.createDataFrame([("a", 4, 5), ("f", 3, 4), ("b", 3, 6), ("c", 4, 7), ("d", 4, 8)], ["C1", "C2","C3"])
df1_s = df1.select([col(c).alias('s_' + c) for c in df1.columns])

在此处输入图片说明

黑主教

您可以在列列表上使用左联接,并在其余列上使用列表理解coalesce功能,使用以下功能选择更新

from pyspark.sql import functions as F

join_columns = ["C1"]

result = df2.alias("df2").join(
    df1.alias("df1"),
    join_columns,
    "left"
).select(
    *join_columns,
    *[
        F.coalesce(f"df1.{c}", f"df2.{c}").alias(c)
        for c in df1.columns if c not in join_columns
    ]
)

result.show()
#+---+---+---+
#| C1| C2| C3|
#+---+---+---+
#|  f|  3|  4|
#|  d|  4|  l|
#|  c|  4|  z|
#|  b|  3|  y|
#|  a|  4|  x|
#+---+---+---+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章