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

How do I quickly get data out of a Google Cloud Datalab notebook?

我只想快速从 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()

你说的是多少数据?我假设这不是 BigQuery Table,因为我们有 APIs。

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

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

至少有2个选项:

从 Datalab 本地下载文件

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

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

以下 link 可能有助于编写代码以使用存储 API.

将文件传输到 Google 云中的存储桶

这是一个工作示例:

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 云

中的存储桶中查看项目

我找到了一种更简单的方法来将 csv 文件从数据实验室笔记本写入存储桶。

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

这里 'data' 是您笔记本中的数据框!

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

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

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

!gsutil cp 'someotherfile.txt' sample_bucket_path

帮了我大忙。将文件从 Datalab 获取到 Google 云存储。