2017-07-26 129 views
0

我正在使用Pyspark 1.6版的Pyspark数据帧。在将此数据帧导出为.CSV文件之前,我需要根据特定条件使用LIKE和OR运算符在一个特定列上过滤数据。为了说明我迄今为止所做的工作,我已经从多个.JSON文件创建了初始数据框。此数据框已被子集化,因此只包含所需的列。然后创建了一个sqlContext临时表。到目前为止,我尝试了两种不同的方法,使用sqlContext并使用Pyspark方法。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方法给我一个语法错误。

我确信这件事很简单,我已经搞砸了,但我会很感激一些帮助。

谢谢!

回答

0
df_filtered = df.filter(
    (df.text.like("#abc")) | (df.text.like("abc"))) 

在PySpark中应该使用“like”和or(“|”)。您可以根据要求添加更多条件。

我希望这会有所帮助。

+0

嗨Anshul,这真的很有帮助谢谢你。令人烦恼的是,当我尝试这个时,我得到一个错误,虽然与以前不同。它说“类型错误:'列'对象不可调用”。我是否需要更改代码的'文本'部分,以便使用单引号(')? – Stig0501

+0

这是我的错,我没有把足够的'|'我的代码中有符号(有很多条件!)。谢谢你的帮助! – Stig0501