使用每个元素的apache beam将流写入gcs

时间:2018-01-13 07:34:05

标签: google-cloud-platform google-cloud-storage google-cloud-dataflow apache-beam apache-beam-io

当前波束管道正在使用FileIO.matchAll().continuously()将文件作为流读取。这将返回PCollection。 我想用相同的名称将这些文件写回另一个gcs存储桶,即每个PCollection是一个文件metadata/readableFile,应该在一些处理后写回另一个存储桶。我是否应该使用任何接收器来实现将每个PCollection项目写回GCS,或者有任何方法可以实现吗? 是否可以为每个元素创建一个窗口,然后使用一些GCS接收器IO来执行此操作。 当在窗口上操作时(即使它有多个元素),beam确保窗口完全处理或根本不处理,换句话说,对于给定窗口原子而不是部分窗口的写入操作GCS or bigquery如果有任何失败?

1 个答案:

答案 0 :(得分:0)

您是否可以简单地编写一个DoFn<ReadableFile, Void>来获取文件并使用FileSystems API将其复制到所需位置?你不需要任何“接收器”来做到这一点 - 而且,无论如何,这就是所有“下沉”(TextIO.write()AvroIO.write()等等)都在引擎盖下:它们只是由ParDoGroupByKey组成的波束变换。