说我有两个数据框,
**A** **B**
| a | b | c | |a|
| 1 | 2 | 3 | |1|
我想根据数据集B中列a的值过滤数据帧A的内容。SQL中等效的where子句就是这样
WHERE NOT (A.a in (select a from B)
我该如何实现?
答案 0 :(得分:2)
要保留左侧表中所有与之匹配的行,可以使用leftsemi
联接。在这种情况下,您只想保留值,如果右表中没有不匹配项,则可以使用leftanti
连接:
df = spark.createDataFrame([(1,2,3),(2,3,4)], ["a","b","c"])
df2 = spark.createDataFrame([(1,2)], ["a","b"])
df.join(df2,'a','leftanti').show()
df
+---+---+---+
| a| b| c|
+---+---+---+
| 1| 2| 3|
| 2| 3| 4|
+---+---+---+
df2
+---+---+
| a| b|
+---+---+
| 1| 2|
+---+---+
结果
+---+---+---+
| a| b| c|
+---+---+---+
| 2| 3| 4|
+---+---+---+
希望这会有所帮助!