【问题标题】:Reading batches of data from BigQuery into Datalab将 BigQuery 中的批量数据读入 Datalab
【发布时间】:2017-09-05 18:50:07
【问题描述】:

我在 BigQuery 表中有一个大数据集(约 4500 万行,13Gb 的数据)。我想在我的 Google Datalab Notebook 中处理这些数据,以使用 pandas 进行一些基本统计,以便稍后在 Datalab 单元格中使用 matplotlib 可视化数据。我认为尝试将所有数据集加载到 pandas 的 Dataframe 中并不是一个好主意(至少我会遇到 RAM 问题)。

是否可以从 BigQuery 批量读取数据(比如 10K 行)以在 Datalab 中使用?

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    如果您的目的是可视化数据,那么抽样会比加载小批量更好吗?

    您可以对数据进行采样,例如:

    import google.datalab.bigquery as bq
    df = bq.Query(sql='SELECT image_url, label FROM coast.train WHERE rand() < 0.01').execute().result().to_dataframe()
    

    或者,一个使用方便的类:

    from google.datalab.ml import BigQueryDataSet
    sampled_df = BigQueryDataSet(table='myds.mytable').sample(1000)
    

    【讨论】:

    • 感谢@BradleyJiang 提供采样的想法,这可能会有所帮助!但是在这里,我正在处理按时间顺序排列的数据,并且二次采样会破坏按时间顺序排列的行。如果我找不到从 BigQuery 批量读取的方法,我想我需要转到原始 csv 文件并批量读取行。
    • 那么按时间排序然后按页查询呢? import google.datalab.bigquery as bq q = bq.Query('select * from myds.mytable order by time') t = q.execute().result() t.to_dataframe(start_row=page_start, max_rows=page_size)
    【解决方案2】:

    您是否尝试过仅在表格上进行迭代? Table 对象是一个可迭代对象,它使用 paged fetcher 从 BigQuery 表中获取数据,它以某种方式流式传输。页面大小默认为 1024。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      相关资源
      最近更新 更多