如果字符串包含 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】:

您可以将likewhen 表达式一起使用:

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 查询?网站抓取

如果 Pandas DataFrame 不包含某些子字符串

字符串中的 Pyspark 双字符替换避免某些单词而不映射到 pandas 或 rdd

如何根据2列比较PySpark中的2个数据帧?

当列表值与Pyspark数据帧中的列值的子字符串匹配时,填充新列

如果包含字符串列表,则过滤 pyspark 数据帧