2017-08-09 106 views
1

我讀過幾篇關於使用「like」運算符以包含字符串/表達式的條件來過濾spark數據框的問題,但是想知道以下是在所需的期望中使用%s的「最佳實踐」條件如下:Pyspark:通過正則表達式使用字符串格式過濾數據框?

input_path = <s3_location_str> 
my_expr = "Arizona.*hot" # a regex expression 
dx = sqlContext.read.parquet(input_path) # "keyword" is a field in dx 

# is the following correct? 
substr = "'%%%s%%'" %my_keyword # escape % via %% to get "%" 
dk = dx.filter("keyword like %s" %substr) 

# dk should contain rows with keyword values such as "Arizona is hot." 

注意

我試圖讓DX的所有行是包含表達my_keyword。否則,對於完全匹配,我們不需要周圍的百分號'%'。

回答

1

從neeraj的提示,這似乎是正確的方式pyspark做到這一點是:

expr = "Arizona.*hot" 
dk = dx.filter[dx["keyword"].rlike(expr)] 

注意dx.filter($ 「關鍵詞」 ......),因爲沒有工作(我的版本)pyspark似乎不支持開箱即用的$術語。

2

嘗試如下所述的rlike函數。

df.filter(<column_name> rlike "<regex_pattern>") 

例如。

dk = dx.filter($"keyword" rlike "<pattern>")