Pyspark:使用字符串格式的正则表达式过滤数据框?
Pyspark: filter dataframe by regex with string formatting?
我读过几篇关于使用 "like" 运算符根据包含 string/expression 的条件过滤 spark 数据帧的帖子,但想知道以下是否是 "best-practice"在以下所需条件下使用 %s:
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 的所有行。否则,对于精确匹配,我们不需要围绕百分号“%”。
试试下面提到的类似函数。
df.filter(<column_name> rlike "<regex_pattern>")
例如。
dk = dx.filter($"keyword" rlike "<pattern>")
根据 neeraj 的提示,在 pyspark 中执行此操作的正确方法似乎是:
expr = "Arizona.*hot"
dk = dx.filter(dx["keyword"].rlike(expr))
请注意,dx.filter($"keyword" ...)
不起作用,因为(我的版本)pyspark 似乎不支持开箱即用的 $
命名法。
我使用以下时间戳正则表达式
expression = r'[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]'
df1 = df.filter(df['eta'].rlike(expression))
我读过几篇关于使用 "like" 运算符根据包含 string/expression 的条件过滤 spark 数据帧的帖子,但想知道以下是否是 "best-practice"在以下所需条件下使用 %s:
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 的所有行。否则,对于精确匹配,我们不需要围绕百分号“%”。
试试下面提到的类似函数。
df.filter(<column_name> rlike "<regex_pattern>")
例如。
dk = dx.filter($"keyword" rlike "<pattern>")
根据 neeraj 的提示,在 pyspark 中执行此操作的正确方法似乎是:
expr = "Arizona.*hot"
dk = dx.filter(dx["keyword"].rlike(expr))
请注意,dx.filter($"keyword" ...)
不起作用,因为(我的版本)pyspark 似乎不支持开箱即用的 $
命名法。
我使用以下时间戳正则表达式
expression = r'[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]'
df1 = df.filter(df['eta'].rlike(expression))