pyspark中的内部反连接[重复]
Posted
技术标签:
【中文标题】pyspark中的内部反连接[重复]【英文标题】:Inner anti join in pyspark [duplicate] 【发布时间】:2020-11-01 14:22:27 【问题描述】:我正在尝试在 pyspark 中进行内部反连接。例如,我在两个 df 中都有一个公共键,现在我需要提取所有在两个 df 中不常见的行。即一个人的 id 不应该与另一个人的 id 匹配。
df1=df1.join(df2,how='inner',df1.id !=df2.id)
但是通过这段代码,我得到了两个 df 中这些 id 相同的行。
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:也许你可以试试left anti join
-
df3 = df1.join(df2, df1['id']==df2['id'], how='left_anti')
df4 = df2.join(df1, df1['id']==df2['id'], how='left_anti')
final_df = df3.unionAll(df4)
所以我们做了两次left anti join
然后union
。
【讨论】:
【参考方案2】:Spark 允许您以多种方式处理此类用例
1.使用 except : 将返回一个新的 DataFrame,其中包含 dataFrame1 中的行,但不包含 dataframe2 中的行。
df1.except(df2)
2。使用减法,返回一个新的 DataFrame,该 DataFrame 包含此 DataFrame 中的行,但不包含另一个 DataFrame 中的行。
df1.subtract(df2)
3.使用 exceptAll() :返回一个新的 DataFrame,该 DataFrame 包含此 DataFrame 中的行,但不包含另一个 DataFrame 中的行,同时保留重复项。
df1.exceptAll(df2)
4.使用 left_anti 连接:作为 DF1 和 DF2 一部分的密钥存在,不应成为结果数据集的一部分
df = df1.join(df2, df1.key == df2.key, "left_anti")
【讨论】:
以上是关于pyspark中的内部反连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark:内部连接两个 pyspark 数据帧并从第一个数据帧中选择所有列,从第二个数据帧中选择几列
python + pyspark:在pyspark中进行多列比较的内部连接错误
pyspark 内连接的替代方法来比较 pyspark 中的两个数据帧