我想使用PySpark的RegexTokenizer从DataFrame列中删除5位或更多位数字。我可以使用以下代码提取这些数字,但是有人知道我可以删除它们吗?
我的代码:
regexTokenizer = RegexTokenizer(inputCol="description", outputCol="tokenized_description", gaps=False,pattern="[0-9]{5,}")
如果字符串是“ 123abc 122323232”,我希望它删除122323232并变成“ 123abc”
答案 0 :(得分:0)
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
到三次的字符串。