最新下载
热门教程
- 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 循环的最佳实践。
相关文章
- Ruby的面向对象方式编程学习杂记 09-23
- 解析proxy代理模式在Ruby设计模式开发中的运用 09-23
- 深入剖析Ruby设计模式编程中对命令模式的相关使用 09-23
- 详解组合模式的结构及其在Ruby设计模式编程中的运用 09-23
- 设计模式中的模板方法模式在Ruby中的应用实例两则 09-23
- 借助RubyGnome2库进行GTK下的Ruby GUI编程的基本方法 09-23