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

Pyspark如何提取DataFrame字符串列第4个反斜杠后的文件路径

PySpark 提取路径第4个反斜杠后内容实现方案

反斜杠属于转义字符,在PySpark的字符串、正则表达式中均需要转义,因此代码中表示1个实际反斜杠需要写4个反斜杠\\\\。

方法1:正则提取(推荐)

使用regexp_extract函数直接匹配目标内容,性能更优、逻辑简洁:

from pyspark.sql.functions import regexp_extract

# 假设存储路径的列名为 file_path
# 正则含义:非捕获组匹配前4个反斜杠及之前的内容,捕获组1取第4个反斜杠后的所有内容
df = df.withColumn("extract_result", regexp_extract("file_path", r"^(?:[^\\\\]*\\\\){4}(.*)$", 1))

方法2:拆分拼接实现

先按反斜杠拆分路径为数组,截取对应位置元素后重新拼接:

from pyspark.sql.functions import split, array_join, slice

df = df.withColumn("path_arr", split("file_path", "\\\\"))
# Spark数组slice为1基索引,第4个反斜杠后对应数组第5位及之后的元素
df = df.withColumn("extract_result", array_join(slice("path_arr", 5, 9999), "\\"))

完整测试代码

可直接运行验证效果:

from pyspark.sql import SparkSession
from pyspark.sql.functions import regexp_extract

# 初始化SparkSession
spark = SparkSession.builder.appName("test_path_extract").getOrCreate()

# 构造测试数据
test_data = [
    ("\\\\D\\Dev\\johnny\\Desktop\\TEST",),
    ("\\\\D\\Dev\\matt\\Desktop\\TEST\\NEW",),
    ("\\\\D\\Dev\\matt\\Desktop\\TEST\\OLD\\TEST",),
    ("\\\\E\\dev\\peter\\Desktop\\RUN\\SUBFOLDER\\New",),
]
df = spark.createDataFrame(test_data, ["file_path"])

# 执行提取
df_result = df.withColumn("extract_result", regexp_extract("file_path", r"^(?:[^\\\\]*\\\\){4}(.*)$", 1))
df_result.show(truncate=False)

运行输出结果和需求预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:06:03