使用 Google 数据流管道读取/解析/写入文件的推荐方法是什么?

What is the recommended approach to read / parse / write a file using Google Data Flow pipeline?

Google 需要设置数据流管道以处理文件(读取、转换和写入),然后将输出写入另一个文件。简而言之,这个过程是 READ > PARSE > TRANSFORM > WRITE。是否可以并行执行此操作?如何根据文件对记录进行分组?例如:输入文件 A-IN.TXT 中的记录需要写入输出文件 A-OUT.TXT。是否有任何内置功能可用于支持此功能?

Apache Beam(Google Cloud Dataflow 使用的 SDK)提供了许多用于处理文件的转换。例如,

  • TextIO:读取文本文件并生成 PCollction 文本行。
  • AvroIO:读取 Avro 文件并生成 PCollection 条记录。
  • FileIO: 许多有用的文件读写转换。

Dataflow 通过以下方式并行读取这些文件:(1) 在读取之前初始拆分为逻辑块 (2) 动态工作重新平衡以在读取时处理散乱的文件。 有关动态工作重新平衡的更多详细信息,请参阅 here

TextIOAvroIO等,目前不跟踪输入文件。因此,您可能必须使用 FIleIO 提供的转换(例如 FileIO.match() 后跟 FileIO.readMatches())并从 ParDO 读取数据并生成 PCollection包含记录和文件名。这些可以使用 dynamic destination feature offered by FileIO.

写入相应的文件