如何将此 sql 查询转换为 pyspark?

How to convert this sql query to pyspark?

SELECT A.* FROM df1 A
WHERE ID NOT IN (SELECT ID FROM df2)

这是我要转换的代码

from Spark-2.2+ 支持子查询,因为您可以注册临时视图并执行相同的查询。

NOT IN 的 DataFrameApi 中,使用 left_anti 连接来模拟相同的查询。

Example:

df.show()
#+----+---+
#|name| id|
#+----+---+
#|   a|  1|
#|   c|  3|
#+----+---+

df1.show()
#+----+---+
#|name| id|
#+----+---+
#|   a|  1|
#|   b|  2|
#+----+---+

df.join(df1,'id','left_anti').show()
#+---+----+
#| id|name|
#+---+----+
#|  3|   c|
#+---+----+

#only if you have few id values in df2 then
ids=df1.select("id").rdd.map(lambda x:x.id).collect()

#isin accepts only values not columns from another dataframe
df.filter(~col("id").isin(ids)).show()
#+----+---+
#|name| id|
#+----+---+
#|   c|  3|
#+----+---+

如果两个数据帧具有相同的列数,那么您可以使用 exceptAll 函数

df.exceptAll(df1).show()
#+----+---+
#|name| id|
#+----+---+
#|   c|  3|
#+----+---+

对于in子查询使用left_semi join.

df.join(df1,'id','left_semi').show()
#+---+----+
#| id|name|
#+---+----+
#|  1|   a|
#+---+----+