从 Vertex AI 和 Google 云存储读取文件

Reading File from Vertex AI and Google Cloud Storage

我正在尝试在 GCP/Vertex AI 中设置管道,但遇到了很多麻烦。该管道是使用 Kubeflow Pipelines 编写的,并且具有许多不同的组件,但有一点特别给我带来麻烦。最终我想在 Cloud Scheduler 的帮助下从 Cloud Functions 启动它。

给我带来问题的部分相当简单,我相信我只需要某种形式的介绍来说明我应该如何考虑此设置。我只是想读写文件(可能是 .csv、.txt 或类似文件)。我想 GCP 中我本地机器上文件系统的模拟是云存储,所以这是我暂时尝试读取的地方(如果我错了请纠正我)。我构建的组件是对 post 的公然抄袭,看起来像这样。

@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

我的大脑出了什么问题?我感觉读写文件不应该这么难。我必须缺少一些基本的东西吗?非常感谢任何帮助。

尝试指定存储桶名称 w/o gs://。这应该可以解决问题。另一个 Whosebug post 说的是同一件事:

您尝试在 GCP 中访问的任何存储桶都有一个唯一的地址来访问它。该地址始终以 gs:// 开头,表示它是云存储 url。现在,GCS api 的设计使其只需要存储桶名称即可使用它。因此,您只需传递存储桶名称。如果您通过浏览器访问存储桶,则需要完整地址才能访问,因此还需要 gs:// 前缀。