Apache Beam:DoFn 和 SimpleFunction 有啥区别?
Posted
技术标签:
【中文标题】Apache Beam:DoFn 和 SimpleFunction 有啥区别?【英文标题】:Apache Beam: What is the difference between DoFn and SimpleFunction?Apache Beam:DoFn 和 SimpleFunction 有什么区别? 【发布时间】:2018-11-04 15:36:54 【问题描述】:在阅读有关使用 Java 处理 Apache Beam 中的流媒体元素时,我遇到了DoFn<InputT, OutputT>
,然后遇到了SimpleFunction<InputT, OutputT>
。
这两个和我看起来很相似,我很难理解其中的区别。
谁能用通俗的说法解释一下区别?
【问题讨论】:
【参考方案1】:从概念上你可以认为SimpleFunction
是DoFn
的一个简单案例:
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
的用例
【讨论】:
以上是关于Apache Beam:DoFn 和 SimpleFunction 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
Apache Beam Stateful DoFn 周期性输出所有 K/V 对
如何将 DoFn PTransform 应用于 Apache Beam 中的 PCollectionTuple