Pyspark 数据帧过滤语法错误

Posted

技术标签:

【中文标题】Pyspark 数据帧过滤语法错误【英文标题】:Pyspark Data Frame Filtering Syntax Error 【发布时间】:2017-07-26 22:39:18 【问题描述】:

我正在使用 Pyspark 1.6 版处理 Pyspark 数据框。在将此数据框导出到 .CSV 文件之前,我需要在特定列上使用 LIKE 和 OR 运算符根据特定条件过滤数据。为了向您介绍我到目前为止所做的事情,我从多个 .JSON 文件创建了初始数据框。此数据框已被子集化,因此仅包含所需的列。然后创建了一个 sqlContext 临时表。到目前为止,我已经尝试了两种不同的方法,使用 sqlContext 和使用 Pyspark 方法。

sqlContext 方法:

df_filtered = sqlContext.sql("SELECT * from df WHERE text LIKE '#abc' OR 'abc' OR 'ghi' OR 'jkl' OR '#mno' OR '#1234' OR '56789'")

这是我在运行 sqlContext 方法时出现的错误消息:

pyspark.sql.utils.AnalysisException: u"cannot resolve '(text LIKE #abc || abc)' due to data type mismatch: differing types in '(text LIKE #abc || abc)' (boolean and string).;" 

pyspark 方法:

df_filtered.where((df["text"].like ("#abc")) || ((brexit_april_2016["text"].like ("abc")) || ((brexit_april_2016["text"].like ("#ghi")) || ((brexit_april_2016["text"].like ("jkl")) || ((brexit_april_2016["text"].like ("#mno")) || ((brexit_april_2016["text"].like ("1234")) || ((brexit_april_2016["text"].like ("56789"))

运行 pyspark 方法时出现语法错误。

我确定我在这里搞砸了一些非常简单的事情,但我希望能得到一些帮助。

谢谢!

【问题讨论】:

【参考方案1】:
df_filtered = df.filter(
    (df.text.like("#abc")) | (df.text.like("abc")))

在 PySpark 中应该像这样使用“like”和或(“|”)。您可以根据需要添加更多条件。

我希望这会有所帮助。

【讨论】:

嗨,Anshul,这真的很有帮助,谢谢。烦人的是,当我尝试这个时,我得到了一个错误,尽管与以前不同。它说“类型错误:'列'对象不可调用”。我是否需要更改代码的“文本”部分,使其位于单引号 (') 中? 这是我的错,我没有放足够的'|'我的代码中的符号(有很多条件!)。感谢您的帮助!

以上是关于Pyspark 数据帧过滤语法错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 3 的 pyspark 中的 seed = 5L 返回语法错误

从 PySpark 中的数据框中删除重复项

从 PySpark 中的数据框中删除重复项

如何根据来自其他 pyspark 数据帧的日期值过滤第二个 pyspark 数据帧?

如何使用pyspark在jupyter笔记本中显示我的csv数据文件

错误函数场景 Adob​​e Animate 语法错误