本文介绍使用 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"
⚠️ 注意事项:
? 小结:善用通配符路径是 PySpark 批量读取分区数据的核心技巧——它既保持代码简洁性,又完全兼容分布式执行引擎,是替代显式 for 循环的最佳实践。