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