Python 如何在Google云数据流作业中从GCS读取blob(pickle)文件?

Python 如何在Google云数据流作业中从GCS读取blob(pickle)文件?,python,google-cloud-storage,google-cloud-dataflow,apache-beam,Python,Google Cloud Storage,Google Cloud Dataflow,Apache Beam,我尝试远程运行数据流管道,它将使用pickle文件。 在本地,我可以使用下面的代码调用该文件 with open (known_args.file_path, 'rb') as fp: file = pickle.load(fp) 但是,当路径是关于云存储时,我发现它无效(gs://…): 我有点理解为什么它不起作用,但我找不到正确的方法 open()是标准的Python库函数,它不理解Google云存储路径。您需要改为使用,它知道它以及Beam支持的其他文件系统。如果您的GCS存储

我尝试远程运行数据流管道,它将使用pickle文件。 在本地,我可以使用下面的代码调用该文件

with open (known_args.file_path, 'rb') as fp:
     file = pickle.load(fp)
但是,当路径是关于云存储时,我发现它无效(gs://…):


我有点理解为什么它不起作用,但我找不到正确的方法

open()
是标准的Python库函数,它不理解Google云存储路径。您需要改为使用,它知道它以及Beam支持的其他文件系统。

如果您的GCS存储桶中有pickle文件,那么您可以将它们作为blob加载,并像在代码中一样进一步处理它们(使用
pickle.load()
):

IOError: [Errno 2] No such file or directory: 'gs://.../.pkl'
class ReadGcsBlobs(beam.DoFn):
    def process(self, element, *args, **kwargs):
        from apache_beam.io.gcp import gcsio
        gcs = gcsio.GcsIO()
        yield (element, gcs.open(element).read())


# usage example:
files = (p
         | "Initialize" >> beam.Create(["gs://your-bucket-name/pickle_file_path.pickle"])
         | "Read blobs" >> beam.ParDo(ReadGcsBlobs())
        )