我有两个数据框:
DF1:
ID | Col1 | Col2
1 a aa
2 b bb
3 c cc
DF2:
ID | Col1 | Col2
1 ab aa
2 b bba
4 d dd
我如何加入这两个DF,结果应该是:
Result:
1 ab aa
2 b bba
3 c cc
4 d dd
我的代码是:
val df = DF1.join(DF2, Seq("ID"), "outer")
.select($"ID",
when(DF1("Col1").isNull, lit(0)).otherwise(DF1("Col1")).as("Col1"),
when(DF1("Col2").isNull, lit(0)).otherwise(DF2("Col2")).as("Col2"))
.orderBy("ID")
它有效,但是我不想指定每列,因为我有大文件。 那么,有没有办法在不指定每一列的情况下更新数据帧(如果第二个DF是新的,并添加一些记录)?
答案 0 :(得分:0)
将leftanti
与df1
进行简单的df2
连接并将结果的合并到df2
中您所需的输出为
df2.union(df1.join(df2, Seq("ID"), "leftanti")).orderBy("ID").show(false)
应该给您
+---+----+----+
|ID |Col1|Col2|
+---+----+----+
|1 |ab |aa |
|2 |b |bba |
|3 |c |cc |
|4 |d |dd |
+---+----+----+
该解决方案与您代码中的逻辑不匹配,但会产生预期的结果