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



我尝试了 2 种方法将 Google BigQuery 中的大表(大约 50,000,000 行,18GB(导入到 Google Datalab 的数据帧中,以便使用 Tensorflow 进行机器学习。

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

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(( 中启用允许大结果。 正如其文件所说,我尝试:

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 倍的数据大小。

知道吗?

谢谢

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

这里有一个关于数据实验室性能改进的有趣讨论,将数据从 BigQuery 下载到 Datalab。基于这些性能测试,性能改进被合并到拉取请求#339中的Google Cloud Datalab中。Datalab 的发行说明中似乎没有提到此改进,但我相信这些修复程序已包含在 Datalab 1.1.20170406 中。请检查 Google Cloud Datalab 的版本,以确保您运行的至少是1.1.20170406 版本。要检查版本,请先单击云数据实验室导航栏右上角的用户图标,然后单击关于数据实验室

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

  1. 在此处打开pandas-gbq存储库中的新问题。
  2. 例如,尝试以csv格式将数据从BigQuery提取到Google Cloud Storage,然后您可以使用pd.read_csv将其加载到数据帧中。以下是 2 种方法:

使用 Google BigQuery/Cloud StorageCLI 工具:使用bq命令行工具和gsutil命令行工具,将数据从 BigQuery 提取到 Google Cloud Storage,然后将对象下载到 Google Cloud Datalab。要执行此操作,bq extract <source_table> <destination_uris>,后跟gsutil cp [LOCAL_OBJECT_LOCATION] gs://[DESTINATION_BUCKET_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()

关于错误read_gbq() got an unexpected keyword argument 'configuration',在版本0.20.0中添加了传递任意关键字参数(configuration(的功能。我相信这个错误是由于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

我希望这有帮助!如果您有任何问题,请告诉我,以便我改进此答案。

安东尼奥斯·帕特尼乌

云数据实验室的贡献者

pandas-gbq 的项目维护者

最新更新