最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何在 PySpark 中高效读取嵌套目录下指定年份 CSV 文件
时间:2026-07-15 19:46:00 编辑:袖梨 来源:一聚教程网
本文介绍使用 PySpark 的通配符路径匹配功能,无需循环即可一次性读取多级嵌套目录(如 /folder1/.../folder4/folder4X/year=2023/*.csv)中所有符合年份条件的 CSV 文件。
本文介绍使用 pyspark 的通配符路径匹配功能,无需循环即可一次性读取多级嵌套目录(如 `/folder1/.../folder4/folder4x/year=2023/*.csv`)中所有符合年份条件的 csv 文件。
在大规模数据处理场景中,文件常按分区结构组织(例如按 Year=2023 子目录存放),而手动遍历子目录不仅低效,还违背 Spark 的声明式、分布式设计理念。PySpark 的 spark.read.csv() 原生支持 Hadoop-compatible 文件系统路径通配符(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 循环的最佳实践。
相关文章
- 逆战未来枪械大全 逆战未来枪械稀有度等级与获取方式详解 07-19
- 逆战未来新手攻略 逆战未来萌新入门避坑指南 07-19
- "无醇啤酒"是完全不含酒精吗 蚂蚁庄园1月17日答案早知道 07-19
- "太常寺"是古代掌管什么事务的机构 蚂蚁新村1月16日答案 07-19
- 四川名菜"开水白菜"就是用开水炖白菜吗 蚂蚁庄园1月17日答案早知道 07-19
- 蚂蚁新村今天正确答案1.16 07-19