我有两个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|
+---+----+
答案 0 :(得分:0)
df_C= df_B.union(df_A).where(col('v').isNotNull())
合并两个数据框并删除空条目。
答案 1 :(得分:0)
您可以使用usingColumn
或usingColumns
来避免重复:
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|
+---+----+