python-3.x - 如何为 BigQuery 的 Google Cloud 远程实例提供身份验证?

标签 python-3.x machine-learning google-bigquery google-cloud-platform

我正在努力使数据收集部分由远程计算机完成。我的远程实例将使用我的 python 代码对 BigQuery 运行查询并获取数据是什么意思?然后它将使用该数据并启动机器学习作业。所有这些步骤都可以通过我本地计算机中的脚本完成。但是,通过执行我的 python 模块“trainer.task.py”的云实例(远程)获取数据的最佳方式是什么?

最佳答案

这个想法是使用服务帐户凭据从 BigQuery 查询数据,如 Authenticating With a Service Account Key File 中所述。

自动化过程可以通过 bash 脚本(我们称之为“deploy_cloud.sh”)来处理,该脚本将包含所有配置参数,如下所示:

export JOB_NAME="your_job_$(date +%Y%m%d_%H%M%S)"
export BUCKET_NAME=your_job
export CLOUD_FOLDER=test-folder
export JOB_DIR=$BUCKET_NAME/$CLOUD_FOLDER/$JOB_NAME
export CLOUD_SECRET_FOLDER=credentials
export SERVICE_ACC_SECRET=service_account_secret.json
# copy your service account credential to cloud storage
# you can do this step manually in your storage
gsutil cp -r path_to_your_service_account_file/$SERVICE_ACC_SECRET gs://$BUCKET_NAME/$CLOUD_FOLDER/$CLOUD_SECRET_FOLDER/$SERVICE_ACC_SECRET
# define your query params
export YOUR_QUERY_PARAM1="provide_param1_value"
export YOUR_QUERY_PARAM2="provide_param2_value"
export YOUR_QUERY_PARAM3="provide_param3_value"
export YOUR_QUERY_PARAM4="provide_param4_value"
# Then submit your training job 

gcloud ml-engine jobs submit training $JOB_NAME \
--job-dir $JOB_DIR \
--runtime-version 1.4 \
--module-name trainer.task \
--package-path ./trainer \
--region $REGION \
--config=trainer/config-gpu.yaml \
-- \
--client-sec gs://$BUCKET_NAME/$CLOUD_FOLDER/$CLOUD_SECRET_FOLDER/$SERVICE_ACC_SECRET \
--query-param1 $YOUR_QUERY_PARAM1 \
--query-param2 $YOUR_QUERY_PARAM2 \
--query-param3 $YOUR_QUERY_PARAM3 \
--query-param4 $YOUR_QUERY_PARAM4 

在您的 task.py 文件中,您将需要使用参数解析器来使用这些传递的值并相应地构建您的查询。在您的task.py文件中,使用以下代码从存储桶中读取并将其写入云实例的本地内存,如下所示:

def read_and_write_client_secret(input_file, output_file):
    with file_io.FileIO(input_file, 'r') as f:
        secret = json.load(f)

    with open(output_file, 'w') as outfile:
        json.dump(secret, outfile)

您可以按如下方式调用上述函数(在您的task.py中):

read_and_write_client_secret(args_dict['client_sec'], 'temp.json')

考虑到您的参数解析器将所有参数存储为 args_dict 中的字典。请注意,您的服务帐户文件将在云实例当前/工作目录中写入“temp.json”。

现在,您需要在创建 BigQuery 客户端时指定文件位置(包含凭据的“temp.json”),如下所示;

# my_query = build_my_query(args_dict['query_param1'], args_dict['query_param2'], args_dict['query_param3'], args_dict['query_param4'])

bigquery_client = bigquery.Client.from_service_account_json(
    'temp.json')
query_job = client.query(my_query)
results = query_job.result()  # Waits for job to complete.

# suggestion: extract data from iterator and create a pandas data frame for further processing

现在您的云实例将能够运行您的查询并使用该数据。您已经可以根据所获得的数据开始机器学习工作了。

关于python-3.x - 如何为 BigQuery 的 Google Cloud 远程实例提供身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48635886/

相关文章:

python - 为什么这个与门神经网络没有朝着最佳权重方向发展?

machine-learning - 如何将多个文本特征用于 NLP 分类器?

google-bigquery - 如何在 BigQuery 中计算多个经度和纬度数据点的质心点?

machine-learning - 初始 kmeans 点如何在 BigQuery ML 中发挥作用?

Python - 返回元组列表

python - 如何通过 Tkinter 中的复选框禁用按钮

python - 无法在 python 中导入名称 GoogleMaps

python - 文件是否关闭?

python - CNTK - 权重更新占缓慢训练时间的 90%

google-bigquery - 在 BigQuery 中合并两个不相关的数据集