Apache spark Spark合并两个数据帧,并通过覆盖第二个数据帧的值来创建单个数据帧
如何在ApacheSpark中合并两个数据帧,并通过重写第二个数据帧的值来创建单个数据帧 输入: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| +---+----+
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|
+---+----+
我希望答案是有帮助的