Pandas 无法将大型数据作为dataframe从Google BigQuery导入到Google Cloud DataLab

Pandas 无法将大型数据作为dataframe从Google BigQuery导入到Google Cloud DataLab,pandas,google-bigquery,google-cloud-datalab,Pandas,Google Bigquery,Google Cloud Datalab,为了使用Tensorflow进行机器学习,我尝试了两种方法将GoogleBigQuery中的一个大表(约50000000行,18GB)导入到GoogleDataLab的dataframe中 首先我使用(所有需要的模块都已导入): 然后它会一直运行…,直到永远。 即使我限制1000000,它也不会改变 其次,我使用: data = pd.read_gbq(query='SELECT {ABOUT_30_COLUMNS...} FROM `TABLE_NAME` LIMIT 1000000', di

为了使用Tensorflow进行机器学习,我尝试了两种方法将GoogleBigQuery中的一个大表(约50000000行,18GB)导入到GoogleDataLab的dataframe中

首先我使用(所有需要的模块都已导入):

然后它会一直运行…,直到永远。 即使我限制1000000,它也不会改变

其次,我使用:

data = pd.read_gbq(query='SELECT {ABOUT_30_COLUMNS...} FROM `TABLE_NAME` LIMIT 1000000', dialect ='standard', project_id='PROJECT_ID')
它一开始运行得很好,但当它运行到大约450000行(使用百分比和总行数计算)时,它会停留在以下位置:

get页面:32;45.0%完成。经过293.1秒。

我找不到如何在read_gbq()中启用allowLargeResults。 正如它所说,我尝试:

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\u gbq()得到一个意外的关键字参数“configuration”

这就是为什么我甚至未能将1000000行导入到谷歌云数据实验室。 我实际上想要导入50倍于数据大小的数据

你知道吗


谢谢

< P> <强>将大数据集加载到谷歌云DATALAB中:确保考虑备选方案,如回答中提到的那些选项。使用采样数据进行初始分析,确定问题的正确模型,然后使用管道方法(例如)处理大型数据集

在将数据从BigQuery下载到Datalab时,有一个关于Datalab性能改进的有趣讨论。在这些性能测试的基础上,一项性能改进于年并入谷歌云数据实验室。这一改进似乎没有在for Datalab中提到,但我相信这些修复是Datalab 1.1.20170406的一部分。请检查Google Cloud Datalab的版本,确保您运行的版本至少为1.1.20170406。要检查版本,请首先单击Cloud Datalab导航栏右上角的用户图标,然后单击关于Datalab的

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

  • 在gbq存储库中打开新问题
  • 例如,尝试以csv格式将数据从BigQuery提取到Google云存储,然后使用
    pd.read\u csv
    将其加载到数据框中。以下是两种方法:
  • 使用Google BigQuery/Cloud Storage CLI工具: 使用
    bq
    gsutil
    ,将数据从BigQuery提取到Google云存储,然后将该对象下载到Google云数据实验室。要执行此类型的操作,请执行
    bq extract
    ,然后执行
    gsutil cp[LOCAL\u OBJECT\u LOCATION]gs://[DESTINATION\u BUCKET\u NAME]/

    使用谷歌云数据实验室

    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()
    
    要升级到0.20.0版,请运行
    pip安装--upgrade-gbq
    。这也将安装
    pandas gbq
    ,这是
    pandas
    的可选依赖项

    或者,您可以尝试在GoogleCloudDataLab中迭代该表。这是可行的,但速度可能较慢。另一个StackOverflow回答中提到了这种方法:

    我希望这有帮助!如果您有任何问题,请让我知道,以便我可以改进此答案

    帕提尼欧花冠酒店

    投稿人


    位于

    的项目维护人员我想知道,使用datalab更像一个笔记本,以便对采样数据进行快速分析和深入探索,而不是一次带来500亿行数据是否更好。处理如此大量的数据需要一些我想象中的集群结构,不确定datalab是否能够处理或扩展以处理它(比如首先处理采样数据,找到问题的正确模型,然后使用一些集群来处理整个数据)。@我同意。这绝对是用户应该考虑的问题。请随时提交您的评论作为一个单独的答案。另外,如果分析需要所有行,那么用户可以消除不必要的列,以减少总体数据集大小。我希望您使用以下信息更新您的答案:),这已经足够好了,也许它只需要提醒OP处理采样数据的方法,然后将模型和结论带到集群进行进一步处理。更新。谢谢@Will!
    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()
    
    import pandas
    pandas.__version__