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