【发布时间】:2018-02-13 13:22:47
【问题描述】:
在我的一个管道 DoFn 中,我正在下载需要由另一个 DoFn 处理的二进制文件。
现在,一旦下载了二进制文件,我还将它存储在 GCS 中,并将文件的位置输出到我的下游 DoFn。但是上传到 GCS 需要很长时间,我什至不确定是否需要。
有没有办法让我的二进制缓冲区在没有任何序列化的情况下可供下游 DoFn 使用?我基本上想让工人在同一台机器上,并通过 RAM 共享数据。这可能吗?
如果不是,我在 DoFNs 之间使用 GCS 进行数据共享是错误的吗?可以直接使用文件系统吗?
【问题讨论】:
-
也许使用
PCollection<byte[]>s 在DoFns 之间传递数据? -
问题是数据可能有数百兆字节
-
我认为“数百兆字节”不会有问题。 Dataflow runner 也进行了一些融合,因此在某种意义上,数据本质上是通过 RAM 共享的。
-
它会自动执行吗?不需要告诉它使用 RAM 吗?
-
正确。中间没有 GroupByKey 的 DoFn 链通常会被融合,并且它们之间的数据将在内存中传递。
标签: java google-cloud-dataflow apache-beam