【发布时间】:2022-03-07 00:02:17
【问题描述】:
我正在尝试在 GCP/Vertex AI 中设置管道,但遇到了很多麻烦。该管道是使用 Kubeflow Pipelines 编写的,并且有许多不同的组件,但特别是一件事给我带来了麻烦。最终,我想在 Cloud Scheduler 的帮助下从 Cloud Function 启动它。
给我带来问题的部分相当简单,我相信我只需要某种形式的介绍来了解我应该如何考虑这个设置。我只是想从文件中读取和写入(可能是 .csv、.txt 或类似文件)。我想我在 GCP 中本地机器上的文件系统的模拟是云存储,所以这是我暂时尝试读取的地方(如果我错了,请纠正我)。我构建的组件是对this 帖子的公然剽窃,看起来像这样。
@component(
packages_to_install=["google-cloud"],
base_image="python:3.9"
)
def main(
):
import csv
from io import StringIO
from google.cloud import storage
BUCKET_NAME = "gs://my_bucket"
storage_client = storage.Client()
bucket = storage_client.get_bucket(BUCKET_NAME)
blob = bucket.blob('test/test.txt')
blob = blob.download_as_string()
blob = blob.decode('utf-8')
blob = StringIO(blob) #tranform bytes to string here
names = csv.reader(blob) #then use csv library to read the content
for name in names:
print(f"First Name: {name[0]}")
我得到的错误如下所示:
google.api_core.exceptions.NotFound: 404 GET https://storage.googleapis.com/storage/v1/b/gs://pipeline_dev?projection=noAcl&prettyPrint=false: Not Found
我的大脑出了什么问题?我觉得读写文件不应该这么难。我一定错过了一些基本的东西吗?非常感谢任何帮助。
【问题讨论】:
-
尝试指定不带 gs:// 的存储桶名称。这应该可以解决问题。另一个说同样事情的 stackoverflow 帖子:stackoverflow.com/questions/53436615/…
-
我不敢相信这真的奏效了。我用这个把头撞到墙上已经有一段时间了。尝试大量不同的方法。你能解释一下
gs://的含义,它的作用以及为什么它应该在这里吗? -
您尝试在 GCP 中访问的任何存储分区都有一个唯一的地址来访问它。该地址始终以 gs:// 开头,它指定它是一个云存储 URL。现在,GCS api 的设计使得它们只需要存储桶名称就可以使用它。因此,您只需传递存储桶名称。如果您通过浏览器访问存储桶,则需要完整的地址才能访问,因此还需要 gs:// 前缀。希望这个答案。
-
@AishwaryShukla 你能把你的评论作为答案吗?
-
我已将其作为评论发布。
标签: python google-cloud-platform google-cloud-storage kubeflow-pipelines google-cloud-vertex-ai