无法将大数据作为数据框导入,从Google BigQuery导入到Google Cloud DataLab

时间:2017-07-02 06:39:47

标签: pandas google-bigquery google-cloud-datalab

为了使用Tensorflow进行机器学习,我尝试了两种方法将Google BigQuery中的大型表格(大约50,000,000行,18GB)导入到Google 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')

它最初运行良好,但当它达到约450,000行(使用百分比和总行数计算)时,它会陷入:

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行导入Google Cloud Datalab的方法。 我实际上想要导入50倍的数据大小。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

在将大型数据集加载到Google Cloud Datalab之前:请务必考虑替代方案,例如本答案评论中提到的替代方案。使用采样数据进行初始分析,确定问题的正确模型,然后使用管道方法(例如Google Cloud Dataflow)处理大型数据集。

在将数据从BigQuery下载到Datalab here时,有关Datalab性能改进的有趣讨论。基于这些性能测试,性能改进已合并到Pull Request #339中的Google Cloud Datalab中。在release notes的Datalab中似乎没有提到这种改进,但我相信这些修复包含在Datalab 1.1.20170406中。请检查Google Cloud Datalab的版本,以确保您至少运行 版本1.1.20170406。要检查版本,请先单击Cloud Datalab导航栏右上角的用户图标,然后单击关于Datalab

关于似乎被卡住的pandas.read_gbq()命令。我想提出一些建议:

  1. pandas-gbq存储库here中打开一个新问题。
  2. 尝试以csv格式从BigQuery提取数据到Google云端存储,然后您可以使用pd.read_csv将数据加载到数据框中。以下是执行此操作的两种方法:
  3. 使用Google BigQuery / Cloud Storage CLI工具 使用bq command line toolgsutil command line tool,将数据从BigQuery提取到Google云端存储,然后将对象下载到Google Cloud Datalab。要执行此操作,请键入bq extract <source_table> <destination_uris>,然后键入gsutil cp [LOCAL_OBJECT_LOCATION] gs://[DESTINATION_BUCKET_NAME]/

    使用Google Cloud 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不是最新的。您可以通过运行

    检查安装的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