Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark数据帧联接:来自第一个数据帧的不匹配记录_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark Spark数据帧联接:来自第一个数据帧的不匹配记录

Apache spark Spark数据帧联接:来自第一个数据帧的不匹配记录,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,大家好,我有2个数据帧,我正在对这些数据帧应用一些连接条件。 1.在连接条件之后,我希望第一个数据帧中的所有数据,其名称、id、代码、lastname与第二个数据帧不匹配。我已经编写了以下代码 val df3=df1.join(df2,df1("name") !== df2("name_2") && df1("id") !== df2("id_2") && df1("code") !== df2("code_2") &&am

大家好,我有2个数据帧,我正在对这些数据帧应用一些连接条件。 1.在连接条件之后,我希望第一个数据帧中的所有数据,其名称、id、代码、lastname与第二个数据帧不匹配。我已经编写了以下代码

    val df3=df1.join(df2,df1("name") !==  df2("name_2")  && 
    df1("id") !== df2("id_2") &&
    df1("code") !==  df2("code_2") && 
    df1("lastname") !==  df2("lastname_2"),"inner")
    .drop(df2("id_2"))
    .drop(df2("name_2"))
    .drop(df2("code_2"))
    .drop(df2("lastname"))
预期结果

    DF1
    id,name,code,lastname
    1,A,001,p1
    2,B,002,p2
    3,C,003,p3

    DF2
    id_2,name_2,code_2,lastname_2
    1,A,001,p1
    2,B,002,p4
    4,D,004,p4


    DF3
    id,name,code,lastname
    3,C,003,p3
有人能帮我一下吗?这是正确的方法吗?还是我应该使用带有“notin”的sql内部查询?。我对spark和使用首次数据帧方法是新手
所以我不确定这是不是正确的方法?

我建议您使用Spark API来处理数据:

        val df1 =
          Seq((1, "20181231"), (2, "20190102"), (3, "20190103"), (4, "20190104"), (5, "20190105")).toDF("id", "date")

        val df2 =
          Seq((1, "20181231"), (2, "20190102"), (4, "20190104"), (5, "20190105")).toDF("id", "date")
选择1。您可以获取其他数据帧中不包括的所有行:

    val df3=df1.except(df2)
选择2。可以使用特定字段进行反联接,例如“id”:

    val df3 = df1.as("table1").join(df2.as("table2"), $"table1.id" === $"table2.id", "leftanti")

    df3.show()

您可以使用
except
从df1获取df2中没有的记录<代码>df1。除了(df2)