如何快速从 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 bigquery(google-cloud-ruby gem)的视图表(具有 resource_full)中获取数据
如何从我的 Google Developers Console 中识别 Google Cloud Storage URI?