【问题标题】:Dataframes Join in Scala with multiple columns is not same with few columns might be null在Scala中加入多列的数据框不同,少数列可能为空
【发布时间】:2019-03-03 15:33:20
【问题描述】:

我有 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.*")

【问题讨论】:

    标签: scala apache-spark dataframe join


    【解决方案1】:

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

    来源:Spark 2.2.0 Docs

    【讨论】:

      【解决方案2】:

      可以使用scaladocs中提到的Except方法。

      dataFrame1.except(dataFrame2)
      

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

      【讨论】:

        【解决方案3】:

        你需要使用 except 方法来实现。

        df2.except(df1).show
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-23
          • 2021-05-27
          • 1970-01-01
          相关资源
          最近更新 更多