Вы можете использовать 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|
+---+----+