gpt4 book ai didi

pyspark - 如何在某些匹配条件下进行LEFT ANTI连接

转载 作者:行者123 更新时间:2023-12-02 03:21:22 25 4
gpt4 key购买 nike

我有两个表 - 一个是具有一对 ID(PC1 和 P2)的核心数据和一些 blob 数据(P3)。另一条是前表中PC1的黑名单数据。我将第一个表称为 in_df,第二个表称为 blacklist_df。

我想要做的是从 in_df 中删除行,只要 in_df.PC1 == blacklist_df.P1 和 in_df.P2 == black_list_df.B1 即可。这是一个代码片段,用于更明确地展示我想要实现的目标。

in_df = sqlContext.createDataFrame([[1,2,'A'],[2,1,'B'],[3,1,'C'], 
[4,11,'D'],[1,3,'D']],['PC1','P2','P3'])
in_df.show()

+---+---+---+
|PC1| P2| P3|
+---+---+---+
| 1| 2| A|
| 2| 1| B|
| 3| 1| C|
| 4| 11| D|
| 1| 3| D|
+---+---+---+

blacklist_df = sqlContext.createDataFrame([[1,2],[2,1]],['P1','B1'])
blacklist_df.show()

+---+---+
| P1| B1|
+---+---+
| 1| 2|
| 2| 1|
+---+---+

最终我想要得到的是以下内容:

+---+--+--+
|PC1|P2|P3|
+---+--+--+
| 1| 3| D|
| 3| 1| C|
| 4|11| D|
+---+--+--+

我尝试了 LEFT_ANTI 加入,但没有成功。

最佳答案

将连接条件作为列表传递给 join 函数,并指定 how='left_anti' 作为连接类型:

in_df.join(
blacklist_df,
[in_df.PC1 == blacklist_df.P1, in_df.P2 == blacklist_df.B1],
how='left_anti'
).show()

+---+---+---+
|PC1| P2| P3|
+---+---+---+
| 1| 3| D|
| 4| 11| D|
| 3| 1| C|
+---+---+---+

关于pyspark - 如何在某些匹配条件下进行LEFT ANTI连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com