Обновление данных из двух фреймов данных Scala-Spark - PullRequest
0 голосов
/ 06 июля 2018

У меня есть два кадра данных:

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 голосов
/ 06 июля 2018

Простое 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  |
+---+----+----+

Решение не соответствует логике, используемой в вашем коде, но дает ожидаемый результат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...