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

如何将此sql查询转换为pyspark?,pyspark,apache-spark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Dataframes,这是我试图转换的代码,它支持子查询,因为您可以注册临时视图并执行相同的查询 在用于的DataFrameApi中,不在中,使用join模拟相同的查询 示例: SELECT A.* FROM df1 A WHERE ID NOT IN (SELECT ID FROM df2) 如果两个数据帧的列数相同,则可以使用exceptAll函数 df.show() #+----+---+ #|name| id| #+----+---+ #| a| 1| #| c| 3| #+----+---+

这是我试图转换的代码,它支持子查询,因为您可以注册临时视图并执行相同的查询

在用于
的DataFrameApi中,不在
中,使用join模拟相同的查询

示例:

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

如果两个数据帧的列数相同,则可以使用
exceptAll
函数

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|
#+----+---+

对于
子查询中的
,请使用
左半部分
连接

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

你试过什么吗?请添加到目前为止您尝试过的内容。。!df1.filter(~col('ID').isin(df2.ID))这是我尝试过的,不确定这是否正确您使用的是哪个版本的spark?我使用的spark版本2.4即使ID列不唯一也会左\反工作吗?如果ID不匹配,则该行将成为左\反联接的结果!
df.join(df1,'id','left_semi').show()
#+---+----+
#| id|name|
#+---+----+
#|  1|   a|
#+---+----+