如何快速从 Google Cloud Datalab 笔记本中获取数据?

Posted

技术标签:

【中文标题】如何快速从 Google Cloud Datalab 笔记本中获取数据?【英文标题】:How do I quickly get data out of a Google Cloud Datalab notebook? 【发布时间】:2016-03-01 09:51:57 【问题描述】:

我只想快速从 Google Cloud Datalab 笔记本中获取一些输出数据,最好是一次性 CSV 文件。

我已经这样做了:

writer = csv.writer(open('output.csv', 'wb'))
for row in rows:
    writer.writerow(row)

这会写入一个本地文件,但是我无法在浏览器中打开它,或者(查看如何)从 Cloud Datalab 下载它。

如何快速将我的数据获取为 CSV 文件?我想也许我必须使用存储 API 并编写它?我发现文档有点难以理解,我有这样的东西:

import gcp
import gcp.storage as storage

// create CSV file? construct filepath? how?

mybucket = storage.Bucket(myfile)
mybucket.create()

【问题讨论】:

【参考方案1】:

至少有2个选项:

从 Datalab 本地下载文件

此选项在当前 Datalab 代码中似乎不可用。我已经为 Datalab 提交了pull request,它可能会解决您的问题。该修复允许用户使用 Datalab 界面编辑/下载不是笔记本 (*.ipynb) 的文件。我能够使用拉取请求中的修改从 Datalab 下载/编辑文本文件。

将文件发送到 Google Cloud 中的存储桶

以下link 可能有助于编写代码以使用 Storage API 将文件传输到 Google Cloud 中的存储桶。

这是一个工作示例:

from datalab.context import Context
import datalab.storage as storage

sample_bucket_name = Context.default().project_id + '-datalab-example'
sample_bucket_path = 'gs://' + sample_bucket_name

sample_bucket = storage.Bucket(sample_bucket_name)

# Create storage bucket if it does not exist
if not sample_bucket.exists():
    sample_bucket.create()

# Write an item to the storage bucket
sample_item = sample_bucket.item('stringtofile.txt')
sample_item.write_to('This is a string', 'text/plain')

# Another way to copy an item from Datalab to Storage Bucket
!gsutil cp 'someotherfile.txt' sample_bucket_path

复制项目后,点击here 在 Google Cloud 的存储桶中查看该项目

【讨论】:

【参考方案2】:

您在谈论多少数据?我假设这不是 BigQuery 表,因为我们有相应的 API。

对于存储 API,将存储桶视为文件夹。您需要在 Bucket 中创建一个 Item。如果您将数据作为字符串分配给 Python 变量,则可以使用 Item (write_to) 上的 API。

如果您像使用 output.csv 一样写入文件,则该文件位于运行 Datalab 的 Docker 容器中。这意味着它是暂时的,并且会在容器关闭时消失。但是,它同时可以访问,您可以使用 %%bash 单元魔法将其发送到其他目的地,例如 curl。

【讨论】:

谢谢。只有大约 1000 行,所以不需要 BigQuery。我可以在本地创建 CSV 文件,然后将其推送到存储桶中吗?这可能是最直接的做事方式。 当然。使用 StringIO 将其写入字符串而不是文件,然后使用 GCS API 或魔法推送到 GCS。【参考方案3】:

我找到了一种将 csv 文件从 datalab notebook 写入存储桶的更简单方法。

    %storage write --object "gs://pathtodata/data.csv" --variable data

这里的“数据”是您笔记本中的数据框!

【讨论】:

【参考方案4】:

使用 datalab 中提供的 ungit 工具将您的文件提交到您的 Google 源存储库,然后使用 gcloud 命令将该存储库克隆到您的本地计算机上:

C:\\gcloud source repos clone datalab-notebooks --project=your-vm-instance-name

【讨论】:

【参考方案5】:

正如上面有人发布的那样:

!gsutil cp 'someotherfile.txt' sample_bucket_path

为我完成了这项工作。将文件从 Datalab 获取到 Google 云存储中。

【讨论】:

以上是关于如何快速从 Google Cloud Datalab 笔记本中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Cloud Functions 连接 Google Cloud SQL?

Google Cloud 线上课堂 | 解析勒索软件攻击链,看 Google Cloud 如何破局

Google Cloud 线上课堂 | 解析勒索软件攻击链,看 Google Cloud 如何破局

更改Google Cloud SQL中的存储类型

如何从 Google bigquery(google-cloud-ruby gem)的视图表(具有 resource_full)中获取数据

如何从我的 Google Developers Console 中识别 Google Cloud Storage URI?