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
相关产品推荐
相关产品推荐

