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

如何从PySpark读取过程中提取路径中的日期参数?

如何从PySpark读取的S3分文件夹数据中提取日期信息

当你通过PySpark读取S3上按YYYY-MM-DD日期分文件夹存储的CSV数据时,日期信息仅存在于文件夹路径中,并未包含在数据本身。以下是两种可靠的提取方法:

方法一:使用正则表达式匹配日期

利用PySpark的input_file_name()函数获取每条数据所属的完整文件路径,再通过正则表达式提取路径中的日期字符串:

from pyspark.sql.functions import input_file_name, regexp_extract

# 读取所有日期文件夹下的CSV数据
df = spark.read.format('csv').option('header', 'true').load('s3://my_root/my_datasource')

# 从文件路径中提取YYYY-MM-DD格式的日期
df_with_date = df.withColumn(
    'date',
    regexp_extract(input_file_name(), r'(\d{4}-\d{2}-\d{2})', 1)
)

# 可选:将字符串类型的日期转为Date类型,方便后续日期相关操作
df_with_date = df_with_date.withColumn('date', df_with_date['date'].cast('date'))

这种方法适配性强,即使路径结构有微小变化,只要日期格式是YYYY-MM-DD就能准确提取。

方法二:基于固定路径结构分割提取

如果你的文件夹路径结构固定(例如始终是s3://my_root/my_datasource/YYYY-MM-DD/文件名.csv),可以通过分割路径字符串直接获取日期文件夹名称:

from pyspark.sql.functions import input_file_name, split, element_at

# 读取数据
df = spark.read.format('csv').option('header', 'true').load('s3://my_root/my_datasource')

# 按路径分隔符/拆分,取倒数第二个元素(即日期文件夹)
df_with_date = df.withColumn(
    'date',
    element_at(split(input_file_name(), '/'), -2)
)

# 可选:转为Date类型
df_with_date = df_with_date.withColumn('date', df_with_date['date'].cast('date'))

这种方法无需正则匹配,执行效率更高,但依赖固定的路径层级结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:12:46