2017-07-02 66 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处理抽样数据的方法,然后将模型和结论提交给一个集群进行进一步处理。 –

相关问题