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

使用modin.pandas.read_parquet读取S3分区parquet出现ETag KeyError错误

问题解决方案

报错根因

该报错是modin 0.10.0版本与s3fs 2021.6.0交互时的已知缺陷:分区存储的Parquet数据根路径是目录,只有实际的.parquet文件对象才会返回ETag字段,modin该版本的read_parquet实现会误将分区目录当作文件对象请求ETag,最终触发KeyError。原生pandas的S3路径读取逻辑会优先递归扫描所有实际Parquet文件,不会对目录发起ETag校验,因此可以正常读取。

可行解决方法

方案1:升级依赖版本(最推荐)

modin从0.12.0版本开始官方修复了分区Parquet的S3路径读取逻辑,同步匹配s3fs 2021.8.0及以上版本即可解决问题,升级命令如下:

pip install modin[all]>=0.12.0 s3fs>=2021.8.0

方案2:手动指定Parquet文件列表(无需升级)

如果无法升级现有依赖,可以先用s3fs扫描出路径下所有实际Parquet文件,再将文件列表传给modin读取,避免modin直接处理分区目录:

import s3fs
import modin.pandas as pd

fs = s3fs.S3FileSystem()
# 替换为你的目标S3路径,递归匹配所有parquet文件
file_paths = fs.glob("bucket/fn.parquet/**/*.parquet")
full_paths = [f"s3://{p}" for p in file_paths]
df = pd.read_parquet(full_paths)

方案3:显式指定pyarrow作为读取引擎(无需升级)

调用read_parquet时指定engine='pyarrow',pyarrow自带的S3读取逻辑不会触发s3fs的ETag校验问题:

import modin.pandas as pd
df = pd.read_parquet('s3://bucket/fn.parquet', engine='pyarrow')

方案4:本地中转读取

如果以上方案都不适用,可以先将S3上的分区目录下载到本地临时路径,再用modin读取本地路径,完全绕过S3路径的校验逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 22:24:00