嗨,我有2个Dataframe,我正在这些Dataframe上应用一些连接条件。1.在连接条件之后,我希望第一个Dataframe中的所有数据,其名称、id、代码、lastname与第二个Dataframe不匹配。我已经编写了下面的代码。
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
有人能帮助我这是正确的方式做这件事还是我应该使用sql内部查询与'不在'?。我是新的Spark和使用第一次Dataframe的方法,所以我不确定这是正确的方式与否?
1条答案
按热度按时间izkcnapc1#
我建议您使用spark api来处理数据:
选项1。您可以获取其他Dataframe中不包含的所有行:
选项2。您可以使用特定字段进行反联接,例如“id”: