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

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

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

最佳答案

从概念上讲,您可以想到SimpleFunctionDoFn的一个简单案例:

  • SimpleFunction<InputT, OutputT>:
  • 简单的输入到输出映射功能;
  • 单输入产生单输出;
  • 静态输入
  • ,您必须使用@Override方法apply()
  • 不依赖于计算上下文;
  • 无法使用Beam状态API;
  • 示例用例:MapElements.via(simpleFunction)一对一转换/修改元素,为每个元素生成一个输出;
  • DoFn<InputT, OutputT>:
  • ParDo执行;
  • 暴露给上下文(时间戳,窗口窗格等);
  • 可以消耗侧面输入;
  • 可以产生多个输出或根本不输出;
  • 可以产生副输出;
  • 可以使用Beam的持久状态API;
  • 动态输入;
  • 示例用例:从流中读取对象,过滤,累积对象,执行聚合,转换它们并将其分发到不同的输出;

  • 您可以找到 ParDos in the dev guide的更多特定示例和用例。

    This part提到了MapElements,这是SimpleFunctions的用例

    07-26 09:12