如何用PySpark读取S3中指定月份的全部分区数据
读取S3分区存储中整个月份的PySpark DataFrame方法
这里有几种直接读取2023年6月全部分区数据的方式,无需合并多个DataFrame:
方法1:使用通配符匹配路径
直接在路径中用*匹配6月的所有日期分区,Spark会自动加载所有符合条件的路径数据:
df = spark.read.text("s3://mydata/date=2023-06-*")
*会匹配2023-06-开头的所有子路径,也就是6月的所有日期分区。
方法2:利用分区列过滤(推荐,性能更优)
Spark会自动识别分区目录中的date=作为DataFrame的分区列,你可以先读取根目录,再通过条件过滤出6月的数据:
# 读取根目录,Spark自动识别date分区列 df = spark.read.text("s3://mydata/") # 过滤2023年6月的所有数据 df = df.where((df.date >= "2023-06-01") & (df.date <= "2023-06-30"))
这种方式会触发谓词下推,Spark只会扫描符合日期条件的分区,不会读取其他月份的数据,性能比通配符更高效,尤其是数据量较大时。
方法3:使用pathGlobFilter选项
在读取时通过pathGlobFilter参数指定路径匹配规则,同样可以直接过滤出目标分区:
df = spark.read.option("pathGlobFilter", "date=2023-06-*").text("s3://mydata/")
这种方式和通配符类似,但可以更灵活地组合过滤规则,适合复杂路径场景。
内容的提问来源于stack exchange,提问作者Tristan Tran
相关产品推荐
相关产品推荐

