Dataframe Spark数据帧筛选器问题
来自这里的SQL背景。。我正在使用Dataframe Spark数据帧筛选器问题,dataframe,apache-spark,apache-spark-sql,Dataframe,Apache Spark,Apache Spark Sql,来自这里的SQL背景。。我正在使用df1=spark.read.jdbc将数据从Azure sql加载到数据帧中。我正在尝试筛选数据以排除符合以下条件的行: df2 = df1.filter("ItemID <> '75' AND Code1 <> 'SL'") 它生成我要过滤掉的行 删除符合条件的行以便将其推送到SQL server的最佳方法是什么? 谢谢将和运算符与一起使用= 已从python3中弃用 示例: df=spark.createDat
df1=spark.read.jdbc
将数据从Azure sql加载到数据帧中。我正在尝试筛选数据以排除符合以下条件的行:
df2 = df1.filter("ItemID <> '75' AND Code1 <> 'SL'")
它生成我要过滤掉的行
删除符合条件的行以便将其推送到SQL server的最佳方法是什么?
谢谢将
和运算符与一起使用=
已从python3中弃用
示例:
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|
#+------+-----+
在SQL世界中,
意味着检查两个操作数的值是否相等,如果值不相等,则条件变为真。
在spark sql中,它的等价物是=代码>。因此,过滤器内的sql条件变为-
#A!=B->如果表达式A与表达式B不相等,则为TRUE;否则是错误的
df2=df1.filter(“ItemID!=“75”和Code1!=“SL”)
=
在spark sql中的含义与ansi sql相同
df2=df1.filter(“ItemID='75'和Code1='SL'))
你能试试类似于过滤器($“ItemIID”=!=“75”&&$“Code1”=!=“SL”)的东西吗?
我忘了提到,我是用python做的。我在$上得到了无效的语法,所以我只是尝试转换为pandas dataframe,它现在可以工作了。pdf=df2。选择(“*”).toPandas(),然后选择pdf1=pdf.loc[(pdf['ItemID'!='75')和(pdf['Code1'!='SL')],然后转换回spark进行下推查询df3=spark.createDataFrame(pdf1)。我不知道为什么上面建议的带有“!=”的语法不起作用。
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|
#+------+-----+