Spark 数据集何时使用 except 与 Left Anti Join

问题描述 投票:0回答:1

我想知道调用 except 之间是否存在性能差异(https://spark.apache.org/docs/2.1.0/api/java/org/apache/spark/sql/Dataset.html# except(org. apache.spark.sql.Dataset) 并使用左反连接。到目前为止,我能看到的唯一区别是,使用左反连接,两个数据集可以有不同的列。

apache-spark apache-spark-sql anti-join
1个回答
6
投票

实际上,您的标题与解释有所不同。

24 年 2 月: 您的评论已被记录并澄清:假设我有 2 个具有相同架构的数据集:数据集 A 和数据集 B。我的目标是找到数据集 A 中不存在于数据集 B 中的所有行;我应该用 EXCEPT 还是 LEFT ANTI JOIN 来做到这一点?

如果数据集 A 和 B 中具有相同的结构,则只需使用 EXCEPT。使用 LEFT ANTI JOIN 会是复杂的编码(如评论中所述),但在技术上是可行的。

除了

是强制执行相同结构的特定实现,并且是减法运算,而

左反连接

允许比较不同的结构,需要

where
子句..

用例不同:1) Left Anti Join 可以应用于与丢失数据相关的许多情况 - 还没有订单的客户、数据库中的孤立数据。 2) except 用于减法,例如机器学习将数据拆分为测试集和训练集,或者您的用例“...新的 DataFrame 仅包含 DS A 中存在的行,但 DS B 中不存在的行...”

性能不应成为真正的障碍,因为它们通常是不同的用例,因此难以比较。 except 将涉及相同的数据源,而 LAJ 将涉及不同的数据源。

所以,你需要使用 EXCEPT。

© www.soinside.com 2019 - 2024. All rights reserved.