如何在Polars中无需GCP服务账户JSON读取GCS上的Parquet文件
解决Polars读取GCS Parquet时无需服务账户JSON的问题
确认Polars依赖与版本
- 确保安装包含GCP支持的Polars包:
pip install polars[gcp],部分环境下缺失GCS相关依赖会导致凭据逻辑失效。 - 确认使用Polars 1.10.0及以上版本,该版本才引入
credential_provider参数。
正确配置credential_provider参数
调用read_parquet或scan_parquet时,显式指定credential_provider="google_default",让Polars使用GCP的默认凭据链,无需指定JSON文件:
import polars as pl # 读取Parquet文件 df = pl.read_parquet("gs://your-bucket/path/file.parquet", credential_provider="google_default") # 或懒加载模式 lf = pl.scan_parquet("gs://your-bucket/path/file.parquet", credential_provider="google_default")
默认凭据链会自动按优先级尝试以下身份验证方式:
- 本地用户凭据(通过
gcloud auth application-default login生成) - GCP服务元数据服务器(如果在GCE/GKE/Cloud Run等GCP托管环境运行)
- 工作负载身份(如果在K8s集群中配置了对应权限)
- 环境变量
GOOGLE_APPLICATION_CREDENTIALS(可选,无需设置即可用其他方式)
适配公司环境的身份验证配置
- 若在GCP托管环境中运行,直接给实例绑定拥有GCS读取权限的服务账户,Polars会自动通过元数据服务器获取凭据,无需额外配置。
- 本地开发时,执行
gcloud auth application-default login,用公司授权的邮箱登录后生成临时凭据,Polars会自动读取该凭据,无需JSON文件。
排查常见问题
- 若仍报错,检查是否误设置
GOOGLE_APPLICATION_CREDENTIALS指向不存在的文件,需清空该环境变量。 - 确认服务账户(或登录邮箱)拥有GCS存储桶的
storage.objects.get权限,权限不足可能会被混淆为“找不到JSON文件”的错误提示。
内容的提问来源于stack exchange,提问作者Skumin
相关产品推荐
相关产品推荐

