如何用Polars读取S3上按DATE_KEY分区的最新Parquet文件
使用Polars读取S3上最新DATE_KEY分区的Parquet文件
按文件夹名称降序排序完全可行。因为你的DATE_KEY采用YYYY-MM-DD格式,这种格式的字符串排序逻辑和日期的时间排序逻辑完全一致——降序排列后,第一个文件夹就是最新的日期分区。
实现步骤
1. 安装依赖
确保你已经安装了必要的包:
pip install polars s3fs
2. 列出并筛选最新的DATE_KEY分区路径
使用s3fs连接S3,列出目标目录下的所有分区文件夹,提取日期并排序:
import s3fs import polars as pl # 初始化S3文件系统 fs = s3fs.S3FileSystem() # 替换为你的实际S3路径(格式:s3://bucket-name/dev/target/refined/STUDENTS.parquet/) base_s3_path = "s3://your-bucket-name/dev/target/refined/STUDENTS.parquet/" # 列出所有DATE_KEY分区文件夹 partition_folders = [path for path in fs.ls(base_s3_path) if "DATE_KEY=" in path] # 按文件夹名称降序排序,取第一个(最新的分区) latest_partition = sorted(partition_folders, reverse=True)[0]
3. 读取最新分区的Parquet文件到Polars DataFrame
直接使用Polars的read_parquet方法读取该路径下的所有Parquet文件:
df = pl.read_parquet(f"{latest_partition}/*.parquet", storage_options={"anon": False})
补充说明
- 如果S3需要身份验证,确保环境变量中配置了
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,也可以通过s3fs.S3FileSystem()的参数直接传入凭证。 - 若分区数量较多,字符串排序的性能损耗可以忽略不计,操作成本极低。
- 也可以将DATE_KEY转换为
datetime类型后排序,但对于YYYY-MM-DD格式的字符串,直接排序结果与日期排序完全一致,无需额外转换。
内容的提问来源于stack exchange,提问作者Balaji Venkatachalam
相关产品推荐
相关产品推荐

