RegexTokenizer
разбивает строку на токены, используя шаблон регулярного выражения в качестве разделителя.
После этого можно объединить слова в массиве, применив функцию pyspark.sql.functions.array_join
к преобразованному столбцу.
from pyspark.ml.feature import RegexTokenizer
from pyspark.sql.functions import array_join
from pyspark.sql import SparkSession
spark = SparkSession\
.builder\
.appName("Pattern Replacement Example")\
.getOrCreate()
df = spark.createDataFrame([('123abc 122323232',)],['pattern'])
regexTokenizer = RegexTokenizer(inputCol="pattern", outputCol="words", pattern="[0-9]{5,}")
df_words = regexTokenizer.transform(df)
df_pattern_removed = df_words.select(array_join("words", '').alias("pattern_removed"), "pattern", "words").show(truncate=False)
print(df_pattern_removed.show(truncate=False))
Я предлагаю по возможности использовать Spark SQL, в частности, функцию pyspark.sql.functions.regexp_replace
.
from pyspark.sql.functions import regexp_replace
from pyspark.sql import SparkSession
spark = SparkSession\
.builder\
.appName("Pattern Replacement Example")\
.getOrCreate()
df = spark.createDataFrame([('123abc 122323232',)],['pattern'])
df_pattern_removed = df.select(
regexp_replace('pattern', r'[0-9]{5,}', '').alias('pattern_replaced'),
"pattern"
)
print(df_pattern_removed.show(truncate=False))
Обратите внимание, что это соответствует строке, содержащей символы 0-9
трижды, а затем a-z
трижды.