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

时间:2018-05-25 09:22:24

标签: java apache-beam beam

在阅读使用Java处理apache beam中的流元素时,我遇到了DoFn<InputT, OutputT>,然后是SimpleFunction<InputT, OutputT>

这两个看起来与我相似,我发现很难理解差异。

有人可以解释外行人的差异吗?

1 个答案:

答案 0 :(得分:5)

从概念上讲,您可以认为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

的用例