pandas读取GCS存储桶CSV文件报isfilelike导入错误如何解决
问题描述
在GCS存储桶pipe_ml-data的postive_data_file/文件夹下存放了若干CSV文件,编写如下代码尝试访问这些文件并读取为pandas DataFrame:
from google.cloud import storage import gcsfs import fsspec storage_client = storage.Client() blobs = storage_client.list_blobs('pipe_ml-data', prefix='postive_data_file/') all_files = list(blobs) all_files = all_files[1::] for blob in all_files: file_path = "gs://pipe_ml-data/{}".format(blob.name) content = pd.read_csv(file_path) content.head() break
运行代码时抛出ImportError,核心错误信息为无法从fsspec.utils模块中导入名称isfilelike,完整报错栈如下:
--------------------------------------------------------------------------- ImportError Traceback (most recent call last) /var/folders/9q/h73jxwsx0f1629kdwpdfmdb80000gn/T/ipykernel_31809/388262887.py in <module> 1 from google.cloud import storage ----> 2 import gcsfs 3 import fsspec 4 storage_client = storage.Client() 5 /opt/anaconda3/lib/python3.9/site-packages/gcsfs/__init__.py in <module> 3 __version__ = get_versions()["version"] 4 del get_versions ----> 5 from .core import GCSFileSystem 6 from .mapping import GCSMap 7 /opt/anaconda3/lib/python3.9/site-packages/gcsfs/core.py in <module> 18 from fsspec.utils import stringify_path, setup_logging 19 from fsspec.callbacks import NoOpCallback ---> 20 from fsspec.implementations.http import get_client 21 from .retry import retry_request, validate_response 22 from .checkers import get_consistency_checker /opt/anaconda3/lib/python3.9/site-packages/fsspec/implementations/http.py in <module> 16 from fsspec.exceptions import FSTimeoutError 17 from fsspec.spec import AbstractBufferedFile ---> 18 from fsspec.utils import DEFAULT_BLOCK_SIZE, isfilelike, nullcontext, tokenize 19 20 from ..caching import AllBytes ImportError: cannot import name 'isfilelike' from 'fsspec.utils' (/opt/anaconda3/lib/python3.9/site-packages/fsspec/utils.py)
已完成gcsfs、fsspec相关依赖库的安装与导入操作,但报错仍未解决。
报错根因
该问题是gcsfs与fsspec版本不兼容导致:当前环境安装的gcsfs版本依赖fsspec.utils下的isfilelike接口,但本地安装的fsspec版本中该函数被移动、重命名或移除,两个库的依赖版本没有对齐。
可行解决方案
- 优先方案:升级两个库到兼容的最新稳定版
pip环境执行以下命令:
conda环境执行以下命令:pip install --upgrade gcsfs fsspec
升级完成后可通过conda update gcsfs fsspec -c conda-forgepip list | grep gcsfs、pip list | grep fsspec确认版本,只要两个库为同批次发布的稳定版本,即可解决该导入错误。 - 备选方案:固定验证过的兼容版本组合
如果升级后和环境内其他依赖产生版本冲突,可以直接固定不存在该问题的版本组合:pip install gcsfs==2023.6.0 fsspec==2023.6.0 - 代码补全提示:现有代码缺少pandas导入语句,运行前需要补充
import pandas as pd,否则调用pd.read_csv时会触发NameError。原有跳过目录占位对象的切片逻辑all_files = all_files[1::]可正常生效,无需修改。
内容的提问来源于stack exchange,提问作者Tazim Taz
相关产品推荐
相关产品推荐

