Фреймы данных Объединение в Scala с несколькими столбцами не совпадает с несколькими столбцами, может быть нулевым - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть 2 кадра данных, как показано ниже.

Цель состоит в том, чтобы найти новую строку из df2, в которой одинаковые значения столбца не существуют в кадре данных 1.

Я попытался объединить двафреймы данных с id в качестве условия соединения и проверенные значения других столбцов не равны, как показано ниже.

Но это не работает.

Может кто-нибудь помочь?

df1: Этот фрейм данныхпоходит на главную таблицу

id   amt    city    date

abc  100    City1   9/26/2018
abc  100    City1   9/25/2018
def  200    City2   9/26/2018
ghi  300    City3   9/26/2018

df2: новый набор данных приходит каждый день. 2. 1014 *

id   amt      city    date

abc  100      City1   9/27/2018
def  null     City2   9/26/2018
ghi  300      City3   9/26/2018

Результат: создайте результирующий кадр данных, как показано ниже:

id   amt    city    date
abc  100    City1   9/27/2018
def  null   City2   9/26/2018

Код, который я пробовал:

val writeDF = df1.join(df2, df1.col("id") === df2.col("id")).
    where(df1.col("amt") =!= df2.col("amt")).where(df1.col("city") =!= 
    df2.col("city")).where(df1.col("date") =!= df2.col("date")).select($"df2.*")

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

За исключением того, что метод может использоваться, как указано в scala docs .

dataFrame1.except(dataFrame2)

вернет другой фрейм данных, содержащий строки dataFrame1, но не dataFrame2

0 голосов
/ 27 сентября 2018

вам нужно использовать, кроме метода для достижения этой цели.

df2.except(df1).show

enter image description here

0 голосов
/ 27 сентября 2018

Метод DataFrame df1.except(df2) возвращает все строки в df1, которых нет в df2.

Источник: Spark 2.2.0 Документы

...