sparkDataframe筛选器问题

uelo1irk  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(452)

来自这里的sql背景。。我在用 df1 = spark.read.jdbc 将数据从azure sql加载到Dataframe。我正在尝试筛选数据以排除符合以下条件的行:

df2 = df1.filter("ItemID <> '75' AND Code1 <> 'SL'")

Dataframe最终是空的,但当我运行等效的sql时,它是正确的。当我把它改成

df2 = df1.filter("ItemID**=**'75' AND Code1**=**'SL'")

它生成我要过滤掉的行。
删除符合条件的行以便将它们推送到sql server的最佳方法是什么?谢谢您

e4yzc0pl

e4yzc0pl1#

在sql世界里, <> 手段 Checks if the value of two operands are equal or not, if values are not equal then condition becomes true. 在sparksql中,它的等价物是 != . 因此,过滤器中的sql条件-


# A != B -> TRUE if expression A is not equivalent to expression B; otherwise FALSE

df2 = df1.filter("ItemID != '75' AND Code1 != 'SL'")
``` `=` 在sparksql中的含义与ansisql相同

df2 = df1.filter("ItemID = '75' AND Code1 = 'SL'")

gcxthw6b

gcxthw6b2#

使用 & 操作员 != 在Pypark。 <> 不推荐使用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|

+------+-----+

相关问题