python - 如何在 AI 平台训练中使用 pandas-gbq 和 BigQuery Storage API?
问题描述
我正在向 GCP AI 平台培训服务提交培训作业。我的训练数据集(同一个 GCP 项目中 BigQuery 表上的大约 40M 行)需要在训练作业开始时作为 pandas 数据框进行预处理,因此我尝试了GCP 文档提出的两种解决方案:
pandas_gbq API:
pd.read_gbq(query, project_id=PROJECT, dialect='standard', use_bqstorage_api=True)
谷歌云大查询 API:
client.query(query).to_dataframe(bqstorage_client=bqstorage_client)
这两种方法都适用于 AI 平台笔记本 VM,在几分钟内将整个 40M 行数据集下载为 pandas 数据帧。我正在努力在 AI 平台训练服务器(在 n1-highmem-16 机器上运行)上复制相同的程序。在 pandas-gbq API 的情况下,我得到一个权限被拒绝的错误:
google.api_core.exceptions.PermissionDenied: 403 request failed: the user does not have bigquery.readsessions.create' permission for 'projects/acn-c4-crmdataplatform-dev'
对于 google-cloud-bigquery API,没有错误。
以下是我按照GCP 文档的建议使用 trainer 包中的 setup.py 文件传递给 AI 平台训练作业的所需包的列表:
- 张量流==2.1.0
- numpy==1.18.2
- 熊猫==1.0.3
- google-api-core==1.17.0
- 谷歌云核心==1.3.0
- pyarrow==0.16.0
- 熊猫-gbq==0.13.1
- 谷歌云大查询存储==0.8.0
- 谷歌云大查询==1.24.0
解决方案
你必须做两件事:
- 首先,检查服务帐户是否
service-<PROJECT_NUMBER>@cloud-ml.google.com.iam.gserviceaccount.com
存在并具有该Cloud ML Service Agent
角色。如果没有,请手动添加(您不必创建它!) - 授予此服务帐号查询您的 BigQuery 数据集的权限。
推荐阅读
- android - 删除字符时过滤器不更新列表
- java - java.util.stream.Collectors.toMap() 的值函数返回常量值
- java - 如何使用 Date today = new Date() 将日期时间从 java 设置为 sql;
- javascript - 尝试通过 paypal api 创建付款时如何解决响应:{type: "cors"}
- java - 按对象属性分组
- reactjs - 反向代理到静态网站不起作用
- python - 围绕 Flask SqlAlchemy 查询简化一对 if-else 语句
- c# - 在 Visual Studio 2019 中的 Xamarin 中捕获 Xaml 错误的最佳方法是什么?
- jsf - 如何在 p:calendar 中将滑块/选择器初始值设置为“值”?
- c# - SqlDataReader - 使用所有匹配项填充子列表