PySpark高效读取嵌套目录指定年份CSV文件的方法
时间:2026-08-17 | 作者:实验室老王 | 阅读:0很多数据工程师都会遇到这样的场景:文件按分区结构层层嵌套,比如 /folder1/.../folder4/folder4X/year=2023/*.csv,想一次性读入所有符合条件的CSV文件,却不想写一堆循环去遍历子目录。其实,PySpark 的通配符路径匹配功能,正好能干净利落地解决这个问题。
在大规模数据处理中,文件按分区结构组织是常态,比如按 Year=2023 这类子目录存放。
手动遍历子目录不仅低效,还违背了Spark 声明式、分布式设计的初衷。
PySpark 的 spark.read.csv() 原生支持 Hadoop 兼容文件系统的路径通配符(glob pattern)。 直接通过灵活的路径表达式,就能批量匹配目标文件,无需任何循环。
推荐的路径写法
下面给出几种常用写法,按匹配精度从高到低排列,可根据实际目录结构灵活选用。
-
精准匹配数字编号子目录(推荐用于结构明确的场景):
path = "/folder1/folder2/folder3/folder4/folder4[1-9]*/year=2023/*.csv" df = spark.read.option("header", "true").csv(path)这里
folder4[1-9]*可以匹配 folder41、folder42、folder410 等,有效避免误匹配 folder40(如果存在的话);末尾显式加上/*.csv更安全,确保只加载 CSV 文件。 -
宽松匹配所有
folder4*子目录(通用性强):path = "/folder1/folder2/folder3/folder4/folder4*/year=2023/*.csv"
-
最简层级通配(适用于 folder4 下直接为年份目录,或子目录命名不规则):
path = "/folder1/folder2/folder3/folder4/*/year=2023/*.csv"
使用时的关键注意点
-
路径通配符(
*、[1-9]、)由底层文件系统(如 HDFS、S3A、本地文件系统)解析,不是 Shell 层面展开的。因此,必须确保运行环境对目标存储支持 glob 操作。
-
如果 CSV 文件没有表头,一定要显式设置
.option("header", "false")。如果包含引号或特殊分隔符,建议同步配置
.option("quote", '"').option("escape", '"'),避免解析出错。 -
对于 S3 或云存储,路径需要使用
s3a://bucket-name/...格式。同时还要确认已配置好对应的凭证与文件系统实现。
-
首次读取时 Spark 会执行路径解析(listStatus)。
如果目录极深或文件极多,可以启用
spark.sql.adaptive.enabled=true(Spark 3.2+)来加速元数据发现。
小结
善用通配符路径,是 PySpark 批量读取分区数据的核心技巧。
它既能保持代码简洁,又完全兼容分布式执行引擎,是替代显式 for 循环的最佳实践。
下次遇到类似场景,可以直接尝试路径表达式,往往比写循环更高效。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- PySpark中按最近时间替换指定行time字段的方法
- 时间:2026-08-17
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15