Python 如何在Google云数据流作业中从GCS读取blob(pickle)文件?
我尝试远程运行数据流管道,它将使用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存储
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())
)