我有一个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
答案 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中执行的导入。