Apache Beam:DoFn和SimpleFunction有什么区别?

kax*_*xil 2 java beam apache-beam

在阅读有关使用Java处理apache Beam中的流式元素的知识时,我遇到了DoFn<InputT, OutputT>,然后发现SimpleFunction<InputT, OutputT>

两者看上去都与我相似,我很难理解它们之间的区别。

有人可以解释外行术语的区别吗?

Ant*_*ton 7

从概念上讲,您可以想到SimpleFunction一个简单的例子DoFn

  • SimpleFunction<InputT, OutputT>

    • 简单的输入到输出映射功能;
    • 单输入产生单输出;
    • 静态类型,您必须要使用@Overrideapply()方法;
    • 不依赖于计算上下文;
    • 不能使用Beam状态API;
    • 用例示例:MapElements.via(simpleFunction)逐个转换/修改元素,为每个元素产生一个输出;
  • DoFn<InputT, OutputT>

    • 与执行ParDo;
    • 暴露给上下文(时间戳,窗口窗格等);
    • 可以消耗侧面输入;
    • 可以产生多个输出或根本不输出;
    • 可以产生侧面输出;
    • 可以使用Beam的持久状态API;
    • 动态输入
    • 用例示例:从流中读取对象,进行过滤,累积,执行聚合,转换并分发到不同的输出;

您可以ParDos在开发指南中找到更具体的示例和用例。

这部分提到MapElements,这是用于SimpleFunctions