#python #apache-spark #pyspark #apache-spark-sql
Вопрос:
Это простой вопрос (я думаю), но я не уверен, что это лучший способ ответить на него.
Мне нужно фильтровать на основе наличия «подстрок» в столбце, содержащем строки в фрейме данных Spark.
В настоящее время я выполняю следующее (фильтрация с использованием .contains
):
data = [[1, "ABC"], [2, "DEF"], [3, "DEF"], [4, "JFKLMN"], [5, "JFKOPQ"], [6, "MNO"]] df = pd.DataFrame(data, columns=["Item", "String"]) sdf = spark.createDataFrame(df)
но я хочу обобщить это, чтобы я мог отфильтровать одну или несколько строк, как показано ниже:
filtered_sdf = sdf.filter( spark_fns.col("String").contains("JFK") | spark_fns.col("String").contains("ABC") )
или
filtered_sdf = sdf.filter( spark_fns.col("String").contains("ABC") )
где в идеале .contains()
часть представляет собой предварительно заданный параметр, содержащий 1 подстрок.
Кто-нибудь знает, как лучше всего это сделать? Или альтернативный метод?
Я пробовал использовать .isin(substring_list)
, но это не работает, потому что мы ищем наличие подстрок.
Ответ №1:
Использование сопоставления регулярных выражений решает проблему!
filtered_sdf = sdf.filter( spark_fns.col("String").contains("JFK") | spark_fns.col("String").rlike("ABC") )