数据流:storage.Client()导入错误或如何列出GCP存储桶的所有blob

时间:2018-05-29 22:10:14

标签: google-cloud-platform google-cloud-storage google-cloud-dataflow apache-beam dataflow

我有一个apache-beam == 2.3.0管道,使用在我的DirectRunner本地工作的python SDK编写。当我将跑步者更改为DataflowRunner时,我得到一个关于'存储'不是全局的错误

检查我的代码我认为这是因为我正在使用存储在我的环境中的凭据。在我的python代码中,我只是这样做:

    class ExtractBlobs(beam.DoFn):
        def process(self, element):
            from google.cloud import storage
            client = storage.Client() 
            yield list(client.get_bucket(element).list_blobs(max_results=100))

真正的问题是我需要客户端,以便我可以获得存储桶,以便然后列出blob 我在这里所做的一切都是如此,我可以列出blob。

因此,如果有人能指出我在数据流中使用'storage.Client()'的正确方向,或者如何在不需要客户端的情况下列出GCP存储桶的blob。

提前致谢! [+]我读过的内容:https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-python

1 个答案:

答案 0 :(得分:0)

修正: 好的,所以进一步阅读和调查结果证明我有所需的库在本地运行我的管道,但Dataflow需要知道这些,以便将它们下载到它旋转的资源中。 https://beam.apache.org/documentation/sdks/python-pipeline-dependencies/

所以我所做的就是创建一个带有google-cloud- *要求的requirements.txt文件。

然后我按照这样开启我的管道:

    python myPipeline.py --requirements_file requirements.txt --save_main_session True 

最后一个标志是告诉它保留你在main中执行的导入。