Scala中具有多个列的数据帧连接不一样,只有很少的列可能为空

时间:2018-09-27 16:49:03

标签: scala apache-spark dataframe join

我有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:新数据集Dataframe 2每天都会出现。

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 :(得分:0)

DataFrame方法df1.except(df2)将返回df1df2中不存在的所有行。

来源:Spark 2.2.0 Docs

答案 1 :(得分:0)

可以使用scala docs中提到的除外方法。

dataFrame1.except(dataFrame2)

将返回另一个包含dataFrame1行但不包含dataFrame2行的数据框

答案 2 :(得分:0)

您需要使用except方法来实现这一目标。

Error response from daemon: Container 824846b64950d7e6f38792c5633f9eca3e84702cfe060de012c4fe39cf365ab9 is not running

enter image description here