我有 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 中解决这个问题?
这里您可以使用以下方法解决。
-- 假设 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。