You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在原生Spark中实现字符串指定子串的大写转换

Spark中替换特定子串为大写的实现方法

方法一:原生Spark函数嵌套替换

如果需要替换的子串数量较少,直接用regexp_replace结合upper函数嵌套处理,逐个替换目标子串即可:

from pyspark.sql import functions as F

# 初始化输入DataFrame
df = spark.createDataFrame([("abcde",), ("aaabbb",)], ["c1"])

# 生成转换后的c2列
result_df = df.withColumn(
    "c2",
    F.regexp_replace(
        F.regexp_replace(F.col("c1"), "ab", F.upper("ab")),
        "de", F.upper("de")
    )
)

result_df.show()

执行后输出:

+------+------+
|    c1|    c2|
+------+------+
| abcde| ABcDE|
|aaabbb|aaABbb|
+------+------+

方法二:自定义UDF(通用场景)

如果需要替换的子串较多,嵌套regexp_replace会过于繁琐,可借助Python正则的回调函数实现自定义UDF,一次性匹配所有目标子串并转大写:

import re
from pyspark.sql import functions as F
from pyspark.sql.types import StringType

# 定义替换逻辑的函数
def replace_target_substrings(s):
    # 匹配所有需要转换的子串,可根据需求修改正则表达式
    pattern = re.compile(r'ab|de')
    return pattern.sub(lambda match: match.group().upper(), s)

# 注册UDF
replace_upper_udf = F.udf(replace_target_substrings, StringType())

# 应用UDF生成c2列
result_df = df.withColumn("c2", replace_upper_udf(F.col("c1")))

result_df.show()

说明

Spark依赖Java正则引擎,不支持PCRE中\U\0\E这类直接在替换中转换大小写的语法,因此需要通过上述两种方式实现需求。

内容的提问来源于stack exchange,提问作者ZygD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:20:19