如何使用不同的DF列更新现有列

时间:2019-05-10 06:09:58

标签: apache-spark pyspark

我有两个DF,DF A和DFB。它们都有相同的架构。 DF A的列C具有不同的值,而DF B的列C具有不同的值,其他数据完全相同。现在,如果我想合并两个表DF C,该如何在spark中执行呢?我尝试执行联接操作,但是它正在创建重复的列。 例如: DF A:

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

DF B:

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

2 个答案:

答案 0 :(得分:0)

df_C= df_B.union(df_A).where(col('v').isNotNull())

合并两个数据框并删除空条目。

答案 1 :(得分:0)

您可以使用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|
+---+----+