首页 > 解决方案 > 从 Google Cloud Storage 下载数据的更好方法?

问题描述

我正在尝试使用本文末尾详细介绍的 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') ) 
                ))
   )

任何帮助表示赞赏,如果我要解决这个完全错误的问题,请告诉我!

标签: google-cloud-platformgoogle-cloud-storagegoogle-cloud-pubsub

解决方案


对于流数据,Cloud Storage --> Data Flow --> Pub/Sub 是更好的选择。由于它是一个流,因此该作业将永远运行。

如果是批处理,那么您可以从 Cloud Storage 触发 Cloud Function,然后将该消息推送到 Pub/Sub。


推荐阅读