使用类似SQL的IN子句过滤Pyspark DataFrame

马田

我想用类似SQL的IN子句过滤Pyspark DataFrame ,如

sc = SparkContext()
sqlc = SQLContext(sc)
df = sqlc.sql('SELECT * from my_df WHERE field1 IN a')

a元组在哪儿(1, 2, 3)我收到此错误:

java.lang.RuntimeException:[1.67]错误:预期“(”,但找到了标识符

这基本上是说它期待的是'(1,2,3)'而不是a。问题是由于从另一个作业中提取了值,因此我无法手动将其写入。

在这种情况下,我该如何过滤?

零323

您传递给SQLContext它的字符串是在SQL环境范围内评估的。它没有捕获闭包。如果要传递变量,则必须使用字符串格式明确地进行操作:

df = sc.parallelize([(1, "foo"), (2, "x"), (3, "bar")]).toDF(("k", "v"))
df.registerTempTable("df")
sqlContext.sql("SELECT * FROM df WHERE v IN {0}".format(("foo", "bar"))).count()
##  2 

显然,出于安全考虑,这不是您在“实际” SQL环境中要使用的东西,但在这里并不重要。

在实践中,DataFrame当您要创建动态查询时,DSL是很多选择:

from pyspark.sql.functions import col

df.where(col("v").isin({"foo", "bar"})).count()
## 2

它很容易为您构建,组成和处理HiveQL / Spark SQL的所有细节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Pyspark DataFrame过滤

来自分类Dev

SQL Pandas DataFrame中的where in子句使用列

来自分类Dev

字符串类型的DataFrame过滤器数据使用类似

来自分类Dev

根据内部字段过滤嵌套的PySpark DataFrame

来自分类Dev

c#使用类似于SQL WHERE子句的EF过滤数据库结果

来自分类Dev

使用OR语句过滤Pandas Dataframe

来自分类Dev

使用字典过滤DataFrame

来自分类Dev

Pandas Dataframe过滤器用于'and'和'or'子句

来自分类Dev

PySpark:按日期字段中的日期字段过滤DataFrame

来自分类Dev

PySpark-按列值拆分/过滤DataFrame

来自分类Dev

熊猫DataFrame过滤

来自分类Dev

如何过滤SparkR DataFrame

来自分类Dev

Julia DataFrame多值过滤

来自分类Dev

熊猫DataFrame过滤

来自分类Dev

过滤熊猫DataFrame

来自分类Dev

pyspark RDD 到 DataFrame

来自分类Dev

使用while循环过滤Pandas DataFrame

来自分类Dev

使用列的长度过滤DataFrame

来自分类Dev

Scala-使用“ endsWith”过滤DataFrame

来自分类Dev

pySpark使用键/值从RDD创建DataFrame

来自分类Dev

使用pyspark将RDD转换为DataFrame

来自分类Dev

如何使用Pyspark Dataframe分配行?

来自分类Dev

使用列表理解生成 PySpark DataFrame

来自分类Dev

Pyspark:将 pyspark.sql.row 转换为 Dataframe

来自分类Dev

如何使用Java在Spark SQL中联接多个列以在DataFrame中进行过滤

来自分类Dev

类似于SQL的过滤

来自分类Dev

Python Pandas:DataFrame过滤负值

来自分类Dev

过滤pandas DataFrame中的行

来自分类Dev

根据样式过滤Pandas DataFrame