Apache Beam 中的架构是什么?

Ser*_*eca 5 dataflow apache-beam

我正在阅读有关 Apache BEAM 中的SCHEMAS 的文档,但我无法理解它的目的是什么、如何、为什么或在哪些情况下我应该使用它们。使用模式或使用扩展 Serialized 接口的类有什么区别?

该文档有一个示例:

@DefaultSchema(JavaFieldSchema.class)
public class TransactionPojo {
  public String bank;
  public double purchaseAmount;
}
Run Code Online (Sandbox Code Playgroud)
PCollection<TransactionPojos> transactionPojos = readTransactionsAsPojo();
Run Code Online (Sandbox Code Playgroud)

但它没有解释readTransactionsAsPojo函数是如何构建的。我认为对此有很多遗漏的解释。

小智 1

使用 Beam Schema 有多种原因,其中一些原因如下:

  • 您不需要Coder为具有模式的对象指定一个;
  • 如果您有具有相同模式的对象,但以不同的方式表示(例如,JavaBean在您的示例中),那么 Beam Schema 将允许对这些对象的 sPojo使用相同的 Schema ;PTransformPCollection
  • 使用 Schema-aware PCollection,编写连接变得更加容易,因为它需要更少的代码样板;
  • 要使用 BeamSQL 来替代PCollection它,您需要有一个 Beam Schema。例如,您可以读取具有自动转换为 Beam Schema 的架构的 Avro 文件,然后对这些 Avro 记录应用 Beam SQL 转换。

另外,我建议观看2019 年 Beam Summit 上有关架构感知 PCollection 和 Beam SQL 的演讲。