You need to enable JavaScript to run this app. PySpark提取路径字符串最后斜杠后完整内容的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

PySpark提取路径字符串最后斜杠后完整内容的实现方法

PySpark提取路径字符串末段内容的修正方案

现有实现的偏差原因

原有提取逻辑的核心问题是选错了匹配锚点:

  • 写的正则_(.*)会捕获字符串中第一个出现的下划线之后的所有内容
  • 待提取的路径末段本身包含大量下划线(如fsp_store_xxx中fsp和store之间的下划线),这种匹配会从内容内部的第一个下划线处直接截断,最终丢失了末段开头的fsp_前缀,和预期结果不符。

可行的修正方式

路径类字符串的天然分隔符是/,只需提取最后一个斜杠之后的所有内容即可,完全不需要以下划线作为匹配锚点,两种常用实现都可以得到符合要求的结果:

方式1:修正正则匹配规则

将正则替换为/([^/]*)$,该规则的逻辑是:

  • 定位字符串末尾位置前最后一个斜杠
  • 捕获该斜杠之后、直到字符串结束的所有非斜杠字符
    调整后的核心代码为:
from pyspark.sql.functions import *
df = spark.sql("""select stack(2,
    "/dbfs/mnt/abc/date=20210224/fsp_store_abcxyz_lmn_",
    "/dbfs/mnt/abc/date=20210224/fsp_store_schu_lev_bsd_s_"
) as (txt)""")
df.withColumn(
    "extract",
    regexp_extract(col("txt"), "/([^/]*)$", 1)
).display(10, False)

方式2:用字符串拆分实现(更易维护)

直接按斜杠拆分字符串,取拆分后数组的最后一个元素,逻辑更直观,不容易踩正则匹配的坑:

from pyspark.sql.functions import split, element_at
df.withColumn(
    "extract",
    element_at(split(col("txt"), "/"), -1)
).display(10, False)

这里的element_at函数支持数组的负索引取值,传入-1即可直接拿到数组的最后一个元素,不需要额外计算数组长度做索引偏移。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 09:13:47