嗨,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] 删除。
我来说两句