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

PySpark如何将字符串列最右侧子串移至左侧并以逗号分隔重排

问题原因

你写的regexp_replace没有效果,是因为str(df2.NAME_RIGHT)是把PySpark的Column对象直接转成了固定字符串,并没有引用每行对应的NAME_RIGHT列的值,自然无法完成逐行的匹配替换。

最优实现方案

直接操作拆分后的数组更稳定,不会出现中间同名子串被误删的问题,代码如下:

from pyspark.sql import functions as F

# 先去除字符串首尾多余空格,再按空格拆分
split_col = F.split(F.trim(df["NAME"]), " ")
# 取拆分后最后一个元素
last_part = split_col.getItem(F.size(split_col) - 1)
# 取拆分后除最后一个元素外的所有部分,拼接为字符串
prefix_part = F.array_join(F.slice(split_col, 1, F.size(split_col) - 1), " ")
# 拼接得到最终结果
df_result = df.withColumn("NAME", F.concat(last_part, F.lit(", "), prefix_part))

沿用原有逻辑的修正方案

如果要继续用正则替换的方式,需要锚定字符串末尾,避免误替换:

df3 = df2.withColumn(
    "NEW_NAME",
    F.concat(
        F.col("NAME_RIGHT"),
        F.lit(", "),
        # 匹配末尾的「空格+最后一个子串」的组合进行替换
        F.regexp_replace(F.col("NAME"), F.concat(F.lit(" "), F.col("NAME_RIGHT"), F.lit("$")), "")
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:01