You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PySpark无循环获取指定路径下2023年的所有CSV文件

解决方案

PySpark支持通过通配符路径直接匹配目标文件,完全不需要循环。针对你的目录结构,有两种常用方法:

方法1:使用通配符精准定位

直接在读取路径中用*匹配中间层级的子文件夹,精准抓取Year=2023下的所有CSV:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("Read2023CSVs").getOrCreate()

# 路径中的*会匹配folder4下所有子文件夹(如folder41、folder42)
df = spark.read.csv("/folder1/folder2/folder3/folder4/*/Year=2023/*.csv", header=True, inferSchema=True)

# 验证读取结果
df.count()
df.show(5)

这里的*是通配符,代表任意名称的目录,PySpark会自动遍历符合规则的路径,只读取目标年份下的CSV文件。

方法2:利用分区自动发现(推荐)

你的目录是标准的分区格式(Year=xxx),PySpark能自动识别分区列,读取后直接过滤更高效:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("ReadPartitionedData").getOrCreate()

# 读取folder4下所有子目录,Spark会自动识别Year分区列
df = spark.read.csv("/folder1/folder2/folder3/folder4/*/", header=True, inferSchema=True)

# 过滤出Year=2023的数据
df_2023 = df.filter(df.Year == "2023")

# 验证结果
df_2023.printSchema()
df_2023.count()

这种方法的优势是Spark会利用分区信息减少不必要的数据扫描,性能优于通配符匹配,后续切换年份也只需修改过滤条件即可。

注意:如果CSV无表头,去掉header=True;若需指定固定Schema,可替换为.schema(自定义Schema)。

内容的提问来源于stack exchange,提问作者ninja_minida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:17:02