从 Google Cloud Storage 下载数据的更好方法?
Posted
技术标签:
【中文标题】从 Google Cloud Storage 下载数据的更好方法?【英文标题】:Better way to download data from Google Cloud Storage? 【发布时间】:2020-11-26 08:40:56 【问题描述】:我正在尝试使用类似于本文末尾详细介绍的 apache 数据流管道:https://cloud.google.com/blog/products/gcp/how-to-process-weather-satellite-data-in-real-time-in-bigquery。我要下载的gos-16 数据集是:https://console.cloud.google.com/storage/browser/gcp-public-data-goes-16?authuser=3&project=fire-neural-network-285603&prefix=。所以我可以创建一个 pub/sub 主题并将文本数据流式传输到我的 pub/sub 主题,然后使用 apache Beam 从 pub/sub 主题下载,但这对我来说似乎有点倒退。有没有一种方法可以在更新时使用 apache-beam 直接从云存储桶下载,而无需处理 pubsub?这似乎是倒退的,因为要创建 pub/sub,我必须创建一个新的数据流作业,因为我总是想要新数据(所以最终会花费很多)。像这样的:
p = beam.Pipeline(runner, options=opts)
(p
| 'events' >> beam.io.ReadStringsFromGoogleCloud(bucketname) <---- looking for this
| 'filter' >> beam.FlatMap(lambda message: g2j.only_infrared(message))
| 'to_jpg' >> beam.Map(lambda objectid:
g2j.goes_to_jpeg(
objectid, lat, lon, bucket,
'goes/_/'.format( lat, lon, os.path.basename(objectid).replace('.nc','.jpg') )
))
)
任何帮助表示赞赏,如果我要解决这个完全错误的问题,请告诉我!
【问题讨论】:
【参考方案1】:对于流式数据,Cloud Storage --> Data Flow --> Pub/Sub 是更好的选择。 由于它是流,因此作业将永远运行。
如果是批处理,那么您可以从 Cloud Storage 触发 Cloud Function,然后将该消息推送到 Pub/Sub。
【讨论】:
啊,好吧,看起来这个数据集每 5 分钟添加一个新文件,所以这将是批处理,对吗?在这种情况下我应该设置云功能而不是数据流? 视情况而定。云数据流为您提供了现成的代码来读取和插入数据。但是,在这种情况下,我更喜欢 Cloud Function。以上是关于从 Google Cloud Storage 下载数据的更好方法?的主要内容,如果未能解决你的问题,请参考以下文章
从 Google Cloud Storage Bucket 下载文件夹
Google Cloud Storage - 使用 CURL 请求下载文件
将文件从 Google Cloud Storage 直接下载到 HDFS 和 Hive 表中
使用 Python API 以最低权限从 Google Cloud Storage 读取数据