2017-07-26 102 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