![](/img/trans.png)
[英]How to access Google Bigquery data from pandas, based on where clause from a local csv
[英]Access Google BigQuery Data from local Jupyter Notebooks
我已經得到了一些筆記本電腦並繼續使用DataLab。 出於各種原因,我想從我的機器上的本地Jupyter筆記本訪問相同的數據。
這個問題提出了一些方法,到目前為止我無法工作。
特別是Gcloud庫:
from gcloud import bigquery
client = bigquery.Client()
給我一個堆棧跟蹤其最后一行:
ContextualVersionConflict: (protobuf 2.6.1 (/usr/local/lib/python2.7/dist-packages), Requirement.parse('protobuf!=3.0.0.b2.post1,>=3.0.0b2'), set(['gcloud']))
熊貓圖書館看起來很有希望:
df=pd.io.gbq.read_gbq('SELECT CCS_Category_ICD9, Gender, Admit_Month FROM [xxxxxxxx-xxxxx:xxxx_100MB_newform.xxxxxx_100MB_newform]ORDER by CCS_Category_ICD9',
project_id='xxxxxxxx-xxxxx')
還給我一個堆棧跟蹤:
IOError: [Errno 2] No such file or directory: '/usr/local/lib/python2.7/dist-packages/httplib2-0.9.1.dist-info/METADATA'
也許我在Pandas方法上有一個auth問題,雖然我的瀏覽器目前正在對該項目進行驗證? 還是我錯過了依賴?
任何建議或指導贊賞..
從本地Jupyter筆記本中訪問A BigQuery數據源的最佳方法是什么?
根據gbq.read()
的錯誤,似乎可能沒有正確安裝httplib2。 在pandas 安裝頁面上 ,Google BigQuery支持需要一些可選的依賴項(httplib2就是其中之一)。 要重新安裝/修復安裝,請嘗試:
pip install httplib2 --ignore-installed
一旦安裝了Google BigQuery支持的可選依賴項,以下代碼就可以運行:
from pandas.io import gbq
df = gbq.read_gbq('SELECT * FROM MyDataset.MyTable', project_id='my-project-id')
如果您使用Datalab特定的方式訪問GCP,那么您可能需要嘗試使用https://github.com/googledatalab/datalab 。 這將為您提供Jupyter Notebook中與Datalab兼容的功能。
我有同樣的問題,但設法解決它通過安裝conda版本的gbq,我已經安裝了anaconda分布的python所以我想如果你使用pip可能會有一些鏈接丟失
conda install pandas-gbq --channel conda-forge這個命令完成了這項業務
我在這里有一個例子: https : //github.com/kanjih-ciandt/docker-jupyter-gcloud/blob/master/ka.ipynb
但是,基本上你首先需要安裝一些軟件包:
!pip install google-cloud --user
!pip install --upgrade google-cloud-bigquery[pandas] --user
!pip install google-cloud-storage --user
如果您已有服務帳戶文件,請執行此操作(替換JSON_SERVICE_ACCOUNT_FILE ):
import logging
import json
import os
from datetime import datetime
import pprint
from googleapiclient import discovery
from oauth2client.service_account import ServiceAccountCredentials
# Default scope to get access token
_SCOPE = 'https://www.googleapis.com/auth/cloud-platform'
from google.cloud import bigquery
client = bigquery.Client.from_service_account_json(JSON_SERVICE_ACCOUNT_FILE)
# Perform a query.
QUERY = (
'SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` '
'WHERE state = "TX" '
'LIMIT 100')
query_job = client.query(QUERY) # API request
rows = query_job.result() # Waits for query to finish
for row in rows:
print(row.name)
但是,如果您有權訪問某些GCP項目,但不知道如何創建服務帳戶,則可以直接在jupyter筆記本中創建它:
SERVICE_ACCOUNT='jupytersa'
JSON_SERVICE_ACCOUNT_FILE = 'sa1.json'
GCP_PROJECT_ID='<GCP_PROJECT_ID>'
import subprocess
import sys
import logging
logger = logging.Logger('catch_all')
def run_command(parameters):
try:
return subprocess.check_output(parameters)
except BaseException as e:
logger.error(e)
logger.error('ERROR: Looking in jupyter console for more information')
run_command([
'gcloud', 'iam', 'service-accounts',
'create', SERVICE_ACCOUNT,
'--display-name', "Service Account for BETA SCC API",
'--project', GCP_PROJECT_ID
])
IAM_ROLES = [
'roles/editor'
]
for role in IAM_ROLES:
run_command([
'gcloud', 'projects', 'add-iam-policy-binding',GCP_PROJECT_ID,
'--member', 'serviceAccount:{}@{}.iam.gserviceaccount.com'.format(SERVICE_ACCOUNT, GCP_PROJECT_ID),
'--quiet', '--role', role
])
run_command([
'gcloud', 'iam', 'service-accounts',
'keys', 'create', JSON_SERVICE_ACCOUNT_FILE ,
'--iam-account',
'{}@{}.iam.gserviceaccount.com'.format(SERVICE_ACCOUNT, GCP_PROJECT_ID)
])
您可以在此處找到完整示例: https : //github.com/kanjih-ciandt/docker-jupyter-gcloud/blob/master/ka.ipynb
總而言之,如果你想從Docker執行這個筆記本,你可以使用這個圖像: https : //cloud.docker.com/u/hkanjih/repository/docker/hkanjih/docker-jupyter-gcloud
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.