2017-08-09 74 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>")