我有一个使用本地DirectRunner的pythonSDK编写的apache-2.3.0管道。当我将运行器更改为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。
因此,如果有人能给我指出在数据流中使用“store. Client()”的正确方向,或者如何在不需要客户端的情况下列出GCP桶的blob。
提前感谢![]我读过的:https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-python
修正:好的,所以在进一步阅读和调查后,我发现我有在本地运行管道所需的库,但是数据流需要知道这些,以便将它们下载到它旋转的资源中。https://beam.apache.org/documentation/sdks/python-pipeline-dependencies/
所以我所做的就是使用我的google-cloud d-*要求创建一个需求. txt文件。
然后我像这样旋转我的管道:
python myPipeline.py --requirements_file requirements.txt --save_main_session True
最后一个标志是告诉它将您所做的导入保留在main中。