Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dataframe Spark数据帧筛选器问题_Dataframe_Apache Spark_Apache Spark Sql - Fatal编程技术网

Dataframe Spark数据帧筛选器问题

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

来自这里的SQL背景。。我正在使用
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|
#+------+-----+