使用Dask读取私有S3存储Parquet时遇‘coroutine不可迭代’错误
解决Dask读取私有非AWS S3 Parquet文件时的
coroutine object is not iterable错误 问题分析
你遇到的错误源于Dask底层依赖的fsspec库默认尝试使用异步S3客户端,但你的私有S3存储服务不兼容异步请求,或是环境中异步依赖缺失,导致返回协程对象而非可迭代的文件列表。另外你代码里的import dask as dd存在错误,正确导入应为dask.dataframe模块。
解决方案
1. 修正代码并强制使用同步客户端
调整代码如下,确保正确导入Dask DataFrame,并通过配置强制使用同步客户端:
import dask.dataframe as dd dd.read_parquet( 's3://ns1/data/key', storage_options={ 'key': '你的访问密钥', 'secret': '你的密钥密码', 'client_kwargs': { 'endpoint_url': 'https://s3.sample-private-cloud.com', 'use_ssl': True }, 'async': False # 禁用异步模式,强制使用同步客户端 }, engine='pyarrow' # 显式指定Parquet解析引擎,可选pyarrow或fastparquet )
2. 安装完整依赖包
执行以下命令安装必要依赖:
pip install s3fs pyarrow
s3fs负责处理S3协议交互,pyarrow是Parquet文件的解析引擎(也可替换为fastparquet)。
3. 先验证S3连接
先用s3fs单独测试连接,排除存储配置问题:
from s3fs import S3FileSystem fs = S3FileSystem( key='你的访问密钥', secret='你的密钥密码', client_kwargs={'endpoint_url': 'https://s3.sample-private-cloud.com'} ) # 列出目标路径下的文件,确认能正常访问 print(fs.ls('ns1/data/key'))
如果这段代码能成功输出文件列表,说明存储配置无问题,再用Dask读取即可正常运行。
内容的提问来源于stack exchange,提问作者nolio
相关产品推荐
相关产品推荐

