使用pd.read_parquet读取GCS的parquet文件时报OSError: Passed non-file path
根本原因
pandas 原生的 pd.read_parquet 接口默认不支持直接解析 GCS 的 gs:// 协议路径,会把该前缀自动截断后当成普通本地文件路径处理,最终抛出非文件路径的报错。你本地 gsutil 可用仅代表系统层面的 GCS 凭证正常,不代表 Python 环境下有适配 GCS 协议的依赖能力。
常见触发场景
- 缺少 GCS 协议适配依赖:pandas 解析远程对象存储路径需要依赖
fsspec虚拟文件系统框架 +gcsfsGCS 驱动,这两个库不属于 pandas 的默认依赖,需要单独安装。 - 依赖版本不兼容:如果已经安装了上述库但仍报错,大概率是 pandas、fsspec、gcsfs 三者的版本不匹配,旧版本的逻辑无法正确识别
gs://前缀。 - 手动指定了不支持远程路径的解析引擎:部分旧版本的
fastparquet引擎不支持直接读取远程路径,会直接丢弃协议前缀后读取本地路径。
解决方法
- 先升级相关依赖到最新稳定版:
pip install pandas fsspec gcsfs --upgrade
- 依赖安装完成后直接调用原读取逻辑即可,pandas 会自动识别
gs://前缀,调用 gcsfs 读取文件,且默认会复用本地 gsutil 对应的 GCP 凭证,无需额外配置。 - 如果仍有路径识别问题,可显式调用 gcsfs 打开文件流后传入 pandas:
import gcsfs import pandas as pd # 初始化GCS文件系统,自动读取本地凭证 fs = gcsfs.GCSFileSystem() # 手动打开文件流后读取 with fs.open("gs://your-bucket/path/to/file.parquet", "rb") as f: df = pd.read_parquet(f)
内容的提问来源于stack exchange,提问作者pymat
相关产品推荐
相关产品推荐

