基于其他数据帧列的重复数据删除

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

我有 pyspark

df1
作为

+----+
|name|
+----+
|   A|
|   B|
|   C|
|   D|
+----+

df2
作为

+------+------+
|name_a|name_b|
+------+------+
|     A|     B|
|     B|     A|
|     C|     A|
|     A|     C|
|     B|     C|
|     C|     B|

现在我想根据

df1
中的值保留或删除
df2
中的值。 就像
A, B
中的
df2
一样,所以将
A
保留在
df1
中,但删除
B
中的
df1

问题是,如果我得到另一对

C, A
,这一次将会删除
A
,即使我在遇到成对
A, B
时决定保留它。

如何在 SQL 或 Pyspark 中解决这个问题?

sql apache-spark join pyspark duplicates
1个回答
0
投票

这里您可以使用以下方法解决。

-- 假设 df1 和 df2 已创建并填充

-- 执行查询根据df2过滤df1

选择名称

来自 (

选择姓名, SUM(动作) AS Final_action

来自 (

选择名称_一个 AS 名称,1 个 AS 操作

来自 df2 联合所有

SELECT name_b AS 名称,-1 AS 操作 来自 df2 ) AS 组合动作 按名称分组 ) 作为最终行动

JOIN df1 f ON f.name = Final_actions.name WHERE Final_actions.final_action > 0;

我们也可以尝试使用临时表和 CTE。

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