这里来自SQL背景。.我正在使用df1 = spark.read.jdbc
将Azure sql中的数据加载到数据帧中。我正在尝试过滤数据以排除满足以下条件的行:
df2 = df1.filter("ItemID <> '75' AND Code1 <> 'SL'")
数据框最终为空,但是当我运行等效的SQL时,它是正确的。当我将其更改为
df2 = df1.filter("ItemID **=** '75' AND Code1 **=** 'SL'")
它会产生我要过滤掉的行。
删除符合条件的行的最佳方法是什么,以便将其推送到SQL Server? 谢谢
答案 0 :(得分:2)
在SQL世界中,<>
的意思是Checks if the value of two operands are equal or not, if values are not equal then condition becomes true.
在spark sql中,它的等效项是!=
。因此,您在过滤器中的sql条件变为-
# A != B -> TRUE if expression A is not equivalent to expression B; otherwise FALSE
df2 = df1.filter("ItemID != '75' AND Code1 != 'SL'")
=
在spark sql中与ansi sql具有相同的含义
df2 = df1.filter("ItemID = '75' AND Code1 = 'SL'")
答案 1 :(得分:0)
在pyspark中将 &
运算符与 !=
一起使用。
<>
已从python3弃用。
Example:
df=spark.createDataFrame([(75,'SL'),(90,'SL1')],['ItemID','Code1'])
df.filter((col("ItemID") != '75') & (col("code1") != 'SL') ).show()
#or using negation
df.filter(~(col("ItemID") == '75') & ~(col("Code1") == 'SL') ).show()
#+------+-----+
#|ItemID|Code1|
#+------+-----+
#| 90| SL1|
#+------+-----+