如何将此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|
#+---+----+