Apache spark Spark数据帧联接:来自第一个数据帧的不匹配记录
大家好,我有2个数据帧,我正在对这些数据帧应用一些连接条件。 1.在连接条件之后,我希望第一个数据帧中的所有数据,其名称、id、代码、lastname与第二个数据帧不匹配。我已经编写了以下代码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
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)