我尝试了 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()
命令。我想提出几点建议:
- 在此处打开
pandas-gbq
存储库中的新问题。 - 例如,尝试以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 的项目维护者