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

时间:2017-08-16 07:14:02

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

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

谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

这实际上是一项非常有用的功能,目前正在pull request #3717

中进行审核

无论如何我都会回答,只是为了传播信息。

一般来说,FileBasedSource和Beam的源抽象的主要目的是提供灵活的文件集合拆分,作为一个巨大的数据集,每行一个记录。

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

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