如何在 Apache Beam 中将文件读取为 byte[]?

How to read files as byte[] in Apache Beam?

我们目前正在对 Cloud Dataflow 上的 Apache Beam Pipeline 进行概念验证。我们将一些文件(无文本;自定义二进制格式)放入 Google Cloud Buckets 中,并希望将这些文件读取为 byte[] 并在流中反序列化它们。但是,我们找不到能够读取非文本文件的 Beam 源。 唯一的想法是扩展 FileBasedSource class,但我们相信应该有一个更简单的解决方案,因为这听起来像是一项非常简单的任务。

感谢大家的帮助。

这实际上是一个普遍有用的功能,目前正在 pull request #3717

审核中

反正我就笼统的回答,只是为了传播信息。

FileBasedSource 的主要目的,以及 Beam 的一般源抽象,是提供文件集合的灵活拆分,将其视为一个巨大的数据集,每行一条记录。

如果每个文件只有一条记录,那么您可以读取 ParDo(DoFn) 中的文件,从文件名到 byte[]。您将获得拆分的最大好处,因为任何 PCollection 都支持元素之间的拆分。

由于 Dataflow 的优化方式,您可能需要 Reshuffle 在 `ParDo.这将确保读取所有文件的并行性与将其名称注入 PCollection 的任何上游转换的并行性分离。