合并两个数据帧并从正确的数据帧中检索所有信息
Merge two data frames and retrieve all the information from the right data frame
嗨 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])
您可以在您的列列表上使用左连接,并使用列表推导式对其余列进行 select 使用 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|
#+---+---+---+
嗨 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])
您可以在您的列列表上使用左连接,并使用列表推导式对其余列进行 select 使用 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|
#+---+---+---+