Apache spark Spark数据帧上的多重连接重复记录

Apache spark Spark数据帧上的多重连接重复记录,apache-spark,dataframe,duplicates,apache-spark-sql,Apache Spark,Dataframe,Duplicates,Apache Spark Sql,我尝试在两个Spark数据帧上进行两次联接,之后我希望将条目保留在第二个数据帧中,并且只保留来自第一个数据帧的匹配结果。到目前为止,我得到的是: val join1 = blacklist.where($"RULE_TYPE".equalTo("S")).join(data,$"DEVICEID" === $"AleDeviceId", "rightouter") val join2 = blacklist.where($"RULE_TYPE".equalTo("M")).joi

我尝试在两个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连接,因为据我所知,这将实现上述功能。 问题是,在加入这些之后,我希望将结果合并到一个具有以下内容的数据帧中:

   join1
  .union(join2)
但是,这将从联接的每个输出中复制记录。有没有一种方法可以做到这一点,而不会在最终的数据帧中获得重复的记录


谢谢

请尝试以下内容:

df = left.join(right, ["name"])

有关此项的更多说明

您可以将这两种条件组合在一起

val join = blacklist.join(data,($"RULE_TYPE" === "S" && $"DEVICEID" === $"AleDeviceId") || 
    ($"RULE_TYPE" === "M" && $"MODULESN" === $"ModuleSerialNumber" && $"DEVICEID" === "AleDeviceId"), "rightouter")

虽然不是最有效的,但应该可以工作:
join1.union(join2.distinct()
我喜欢这样。我试试看。谢谢