我正在尝试在两个Spark数据帧上进行两次连接,之后我想保留第二个数据帧中的条目,并且只保留第一个数据帧的匹配结果。到目前为止我所拥有的是:
val join1 = blacklist.where($"RULE_TYPE".equalTo("S")).join(data,$"DEVICEID" === $"AleDeviceId", "rightouter")
val join2 = blacklist.where($"RULE_TYPE".equalTo("M")).join(data,$"MODULESN" === $"ModuleSerialNumber" && $"DEVICEID" === "AleDeviceId", "rightouter")
我使用了rightouter join,因为我理解这将完成上面描述的内容。 问题是,在加入这些之后,我希望将结果合并到一个数据框中,并具有以下内容:
join1
.union(join2)
但是,这将从连接的每个输出中复制记录。有没有办法在没有在最终数据帧中获得重复记录的情况下执行此操作?
谢谢
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以将两个条件组合在一起。
val join = blacklist.join(data,($"RULE_TYPE" === "S" && $"DEVICEID" === $"AleDeviceId") ||
($"RULE_TYPE" === "M" && $"MODULESN" === $"ModuleSerialNumber" && $"DEVICEID" === "AleDeviceId"), "rightouter")