更新来自两个数据框架Scala-Spark

时间:2018-07-06 11:40:55

标签: scala apache-spark dataframe

我有两个数据框:

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是新的,并添加一些记录)?

1 个答案:

答案 0 :(得分:0)

leftantidf1进行简单的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  |
+---+----+----+

该解决方案与您代码中的逻辑不匹配,但会产生预期的结果