一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何在 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 循环的最佳实践。

热门栏目