我们目前正在开发基于云数据流的Apache Beam Pipeline概念验证。我们将一些文件(无文本;自定义二进制格式)放入Google Cloud Buckets中,并希望将这些文件作为byte []读取,并在流程中对它们进行反序列化。但是,我们找不到能够读取非文本文件的Beam源。
唯一的想法是扩展FileBasedSource
类,但我们相信应该有一个更简单的解决方案,因为这听起来像一个非常简单的任务。
谢谢你的帮助。
答案 0 :(得分:2)
这实际上是一项非常有用的功能,目前正在pull request #3717
中进行审核无论如何我都会回答,只是为了传播信息。
一般来说,FileBasedSource
和Beam的源抽象的主要目的是提供灵活的文件集合拆分,作为一个巨大的数据集,每行一个记录。
如果每个文件只有一条记录,那么您可以将ParDo(DoFn)
中的文件从文件名读取到byte[]
。您将获得拆分的最大好处,因为任何PCollection都支持在元素之间进行拆分。
由于Dataflow的优化方式,您可能需要在ParDo之前进行Reshuffle
转换。这将确保读取所有文件的并行性与上游转换将其名称注入PCollection的并行性分离。