使用apache_beam.io.filesystems.FileSystems
如何使用ParDo和DoFn写入GCS?我已经从pardo获得csv格式的输出,我是否需要编写另一个pardo才能将其写入gcs或可以直接导入模块以将其直接写入gcs?请帮助
答案 0 :(得分:1)
我有一个示例here,其中我使用apache_beam.io.filesystems.FileSystems
将b64编码的图像写入GCS。管道的最后一步将b64
作为包含两个字段key_id
和image
的PCollection并应用ParDo:
b64 | 'Save images' >> beam.ParDo(WriteToSeparateFiles(known_args.output))
其中known_args.output
是GCS基本路径,WriteToSeparateFiles
如下:
class WriteToSeparateFiles(beam.DoFn):
def __init__(self, outdir):
self.outdir = outdir
def process(self, element):
writer = filesystems.FileSystems.create(self.outdir + element['key_id'] + '.png')
writer.write(element['image'])
writer.close()
使用filesystems.FileSystems.create()
,我可以控制目标路径。对于基本路径,我使用传递给函数的参数,并使用每个元素的key_id
生成有意义的文件名。最后,我在写图像时附加了.png
扩展名。
我使用writer.write(element['image'])
为每个文件保存image
字段的内容,并使用writer.close()
关闭流。