2017-07-02 103 views
1

我嘗試了兩種方法將谷歌BigQuery中的大表(大約50,000,000行18GB)導入到Google Datalab的數據框中,以便執行機器學習使用Tensorflow。無法將大數據作爲數據框從Google BigQuery導入Google Cloud DataLab

首先我使用(需要所有模塊均採用進口):

data = bq.Query('SELECT {ABOUT_30_COLUMNS...} FROM `TABLE_NAME`').execute().result().to_dataframe() 

然後保持Running...直到永遠。 即使我做LIMIT 1000000,它不會改變。

其次我用:

data = pd.read_gbq(query='SELECT {ABOUT_30_COLUMNS...} FROM `TABLE_NAME` LIMIT 1000000', dialect ='standard', project_id='PROJECT_ID') 

它起初運行良好,但是當它進入到45萬行(計算採用率和總的行數)時,它會停留在:

Got page: 32; 45.0% done. Elapsed 293.1 s.

而我找不到如何在read_gbq()中啓用allowLargeResults。 作爲其document說,我嘗試:

data = pd.read_gbq(query='SELECT {ABOUT_30_COLUMNS...} FROM `TABLE_NAME` LIMIT 1000000', dialect ='standard', project_id='PROJECT_ID', configuration = {'query': {'allowLargeResult': True}}) 

然後我得到:

read_gbq() got an unexpected keyword argument 'configuration'

那怎麼我甚至未能導入1,000,000行到谷歌雲Datalab。 我其實想要導入數據大小的50倍。

有什麼想法嗎?

感謝

回答

1

加載大型數據集到谷歌雲Datalab前:,請務必考慮替代品,如在這個答案的評論提到的那些。使用採樣數據進行初始分析,確定問題的正確模型,然後使用流水線方法(例如Google Cloud Dataflow)處理大型數據集。

將數據從BigQuery下載到Datalab時有一個關於Datalab性能改進的有趣討論here。根據這些性能測試,將性能改進合併到Pull Request #339中的Google Cloud Datalab中。在Datalab的release notes中似乎沒有提到這種改進,但我相信這些修復包含在Datalab 1.1.20170406的一部分中。請檢查Google Cloud Datalab的版本,以確保您正在運行至少版本1.1.20170406。要檢查版本,首先單擊Cloud Datalab中導航欄右上角的用戶圖標,然後單擊關於Datalab

關於pandas.read_gbq()似乎卡住的命令。我想提供幾點建議:

  1. pandas-gbq資源庫here中開啓新問題。
  2. 嘗試以csv格式將數據從BigQuery提取到Google Cloud Storage,例如,您可以使用pd.read_csv加載到數據框中。這裏有兩個方法來做到這一點:

使用谷歌的BigQuery /雲存儲CLI工具: 運用的BigQuery的bqcommand line toolgsutilcommand line tool,提取數據到谷歌雲存儲,然後下載對象到谷歌Cloud Datalab。要做到這一點類型bq extract <source_table> <destination_uris>,其次是gsutil cp [LOCAL_OBJECT_LOCATION] gs://[DESTINATION_BUCKET_NAME]/

使用谷歌雲Datalab

import google.datalab.bigquery as bq 
import google.datalab.storage as storage 
bq.Query(<your query>).execute(output_options=bq.QueryOutput.file(path='gs://<your_bucket>/<object name>', use_cache=False)).result() 
result = storage.Bucket(<your_bucket>).object(<object name>).download() 

關於錯誤read_gbq() got an unexpected keyword argument 'configuration',能夠通過任意關鍵字參數(configuration)在0.20.0版本加入。我相信這個錯誤是由於pandas不是最新的。您可以通過運行

import pandas 
pandas.__version__ 

要升級到0.20.0版本,運行pip install --upgrade pandas pandas-gbq檢查已安裝熊貓的版本。這也將安裝pandas-gbq這是pandas的可選依賴項。

或者,您可以嘗試在Google Cloud Datalab中對錶格進行迭代。這有效,但可能會更慢。這種方法在另一個StackOverflow答案中提到:https://stackoverflow.com/a/43382995/5990514

我希望這有助於!請讓我知道如果你有任何問題,所以我可以改善這個答案。

Anthonios Partheniou

貢獻者在Cloud Datalab

項目的維護者在pandas-gbq

+1

我不知道這將是更好地使用datalab更像是快速分析和與採樣數據見地勘探筆記本,而不是把一次500億行。處理這麼大量的數據需要我想象的一些集羣結構,我不確定datalab是否能夠處理或擴展來處理它(例如,先處理採樣數據,找到問題的正確模型,然後使用一些集羣處理整個數據)。 –

+0

@我同意。這絕對是用戶應該思考的問題。請隨時提交您的評論作爲一個單獨的答案。另外,如果需要所有行進行分析,那麼潛在用戶可以刪除不必要的列以減少總體數據集大小。 –

+1

我寧願你用這些信息更新你的答案:),它已經足夠好了,也許它只是需要警告OP處理抽樣數據的方法,然後將模型和結論提交給一個集羣進行進一步處理。 –

相關問題