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

9
在阅读有关使用Java在Apache Beam中处理流元素的过程中,我遇到了DoFn<InputT,OutputT>,然后又遇到了SimpleFunction<InputT,OutputT>
这两者对我来说看起来很相似,我发现很难理解它们之间的区别。
可以有人用通俗易懂的话解释一下它们的区别吗?
1个回答

13

从概念上来说,你可以将SimpleFunction视为DoFn的一个简单情况:

  • SimpleFunction<InputT,OutputT>

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

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

你可以在开发指南中找到更具体的ParDo示例和用例

这部分内容提到了MapElements,它是使用SimpleFunctions的一个案例。


那么,就像FlatMap是ParDo的高级函数一样,SimpleFunction是否可以被认为是DoFn的更高级别的函数? - sra7687

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接