Pyspark: фильтровать фрейм данных по регулярному выражению с форматированием строк?

Я прочитал несколько сообщений об использовании оператора " like "для фильтрации фрейма данных spark по условию, содержащему строку/выражение, но задавался вопросом, является ли следующее" лучшей практикой " при использовании %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. В противном случае для точных совпадений нам не понадобились бы окружающие процентные знаки"%".

2 ответов


из подсказки neeraj кажется, что правильный способ сделать это в pyspark:

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

обратите внимание, что dx.фильтр($"ключевое слово" ...) не работал, так как (моя версия) pyspark, похоже, не поддерживал номенклатуру $ из коробки.


попробуйте функцию rlike, как указано ниже.

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

например.

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