首页 > 解决方案 > 如何使用不同的df列更新现有列

问题描述

我有两个 DF,DF A 和 DF B。两者都有相同的架构。DF A的C列值不同,DF B的C列值不同,其他数据完全相同。现在,如果我想合并两个表DF C,如何在火花中做到这一点?我试图做加入操作,但它正在创建重复的列。例如:DF A:

+---+----+ | k| v| +---+----+ | 1| | | 2|bar1| +---+----+

东风乙:

+---+----+ | k| v| +---+----+ | 1|foo1| | 2| | +---+----+ 预期结果: +---+----+ | k| v| +---+----+ | 1|foo1| | 2|bar1| +---+----+

标签: apache-sparkpyspark

解决方案


您可以使用usingColumnusingColumns避免重复:

val dfA = Seq((1, Option.empty[String]), (2, Some("bar1"))).toDF("k", "v")
val dfB = Seq((1, Some("foo1")), (2, Option.empty[String])).toDF("k", "v")

dfA.withColumnRenamed("v", "_av")
  .join(dfB.withColumnRenamed("v", "_bv"), usingColumn = "k")
  .withColumn("v", coalesce($"_av", $"_bv"))
  .drop("_av", "_bv")
  .show()

输出:

+---+----+
|  k|   v|
+---+----+
|  1|foo1|
|  2|bar1|
+---+----+

推荐阅读