根据另一列的值过滤数据框列

时间:2018-07-16 13:16:50

标签: python apache-spark pyspark

说我有两个数据框,

   **A**                   **B**

| a | b | c |                |a|

| 1 | 2 | 3 |                |1|

我想根据数据集B中列a的值过滤数据帧A的内容。SQL中等效的where子句就是这样

WHERE NOT (A.a in (select a from B)

我该如何实现?

1 个答案:

答案 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|
+---+---+---+

希望这会有所帮助!