为了使用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倍的数据大小。
有什么想法吗?
由于
答案 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()
命令。我想提出一些建议:
pandas-gbq
存储库here中打开一个新问题。pd.read_csv
将数据加载到数据框中。以下是执行此操作的两种方法: 使用Google BigQuery / Cloud Storage CLI工具
使用bq
command line tool和gsutil
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
不是最新的。您可以通过运行
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
的贡献者项目维护者pandas-gbq