Apache spark Spark合并两个数据帧,并通过覆盖第二个数据帧的值来创建单个数据帧

Apache spark Spark合并两个数据帧,并通过覆盖第二个数据帧的值来创建单个数据帧,apache-spark,Apache Spark,如何在ApacheSpark中合并两个数据帧,并通过重写第二个数据帧的值来创建单个数据帧 输入: val r1 = Seq((1, "A1_1"), (2, "A2_1"), (3, "A3_1"), (4, "A4_1")).toDF("c1","c2") val r2 = Seq((3, "A3_2"), (4, "A4_2"), (5, "A5_2"), (6, "A6_2")).toDF("c1","c2") 期望输出 +---+----+ | c1| c2| +---+----+

如何在ApacheSpark中合并两个数据帧,并通过重写第二个数据帧的值来创建单个数据帧

输入:

val r1 = Seq((1, "A1_1"), (2, "A2_1"), (3, "A3_1"), (4, "A4_1")).toDF("c1","c2")
val r2 = Seq((3, "A3_2"), (4, "A4_2"), (5, "A5_2"), (6, "A6_2")).toDF("c1","c2")
期望输出

+---+----+
| c1|  c2|
+---+----+
|  1|A1_1|
|  2|A2_1|
|  3|A3_2|
|  4|A4_2|
|  5|A5_2|
|  6|A6_2|
+---+----+
外部
join
(需要数据帧的别名,因为两者都包含相同的列名)和
coalesce
内置函数(
coalesce
将首先返回其中的非空列)应能获得所需的输出

import org.apache.spark.sql.functions._
r1.as("r1").join(r2.as("r2"), col("r1.c1") === col("r2.c1"), "outer")
  .select(coalesce(col("r1.c1"), col("r2.c1")).as("c1"), coalesce(col("r2.c2"), col("r1.c2")).as("c2"))
  .show(false)
应该给你什么

+---+----+
|c1 |c2  |
+---+----+
|1  |A1_1|
|6  |A6_2|
|3  |A3_2|
|5  |A5_2|
|4  |A4_2|
|2  |A2_1|
+---+----+
我希望答案是有帮助的