如果字符串包含 PySpark 中的某些子字符串,则替换字符串
Posted
技术标签:
【中文标题】如果字符串包含 PySpark 中的某些子字符串,则替换字符串【英文标题】:Replace string if it contains certain substring in PySpark 【发布时间】:2021-02-18 00:32:07 【问题描述】:如果列包含某个子字符串,则需要更新 PySpark 数据框
例如:
df 看起来像
id address
1 spring-field_garden
2 spring-field_lane
3 new_berry place
如果地址列包含spring-field_
,只需将其替换为spring-field
。
预期结果:
id address
1 spring-field
2 spring-field
3 new_berry place
试过了:
df = df.withColumn('address',F.regexp_replace(F.col('address'), 'spring-field_*', 'spring-field'))
好像不行。
【问题讨论】:
【参考方案1】:您可以将like
与when
表达式一起使用:
from pyspark.sql import functions as F
df = df.withColumn(
'address',
F.when(
F.col('address').like('%spring-field_%'),
F.lit('spring-field')
).otherwise(F.col('address'))
)
【讨论】:
【参考方案2】:您可以使用以下正则表达式:
df.withColumn(
'address',
F.regexp_replace('address', r'.*spring-field.*', 'spring-field')
)
或者你可以使用contains
的方法:
df.withColumn(
'address',
F.when(
F.col('address').contains("spring-field"), "spring-field"
).otherwise(F.col('address'))
)
【讨论】:
以上是关于如果字符串包含 PySpark 中的某些子字符串,则替换字符串的主要内容,如果未能解决你的问题,请参考以下文章
如果不包含某些字符串,则替换某些子值?还是重写 XPATH 查询?网站抓取
字符串中的 Pyspark 双字符替换避免某些单词而不映射到 pandas 或 rdd