java - Apache Beam:DoFn 和 SimpleFunction 有什么区别?
问题描述
在阅读有关使用 Java 处理 Apache Beam 中的流媒体元素时,我遇到了DoFn<InputT, OutputT>
,然后遇到了SimpleFunction<InputT, OutputT>
.
这两个看起来都与我相似,我发现很难理解其中的区别。
有人可以用外行术语解释区别吗?
解决方案
从概念上讲,您可以想到SimpleFunction
一个简单的案例DoFn
:
SimpleFunction<InputT, OutputT>
:- 简单的输入到输出映射函数;
- 单一输入产生单一输出;
- 静态类型,你必须要
@Override
方法apply()
; - 不依赖于计算上下文;
- 不能使用 Beam 状态 API;
- 示例用例:
MapElements.via(simpleFunction)
逐个转换/修改元素,为每个元素生成一个输出;
DoFn<InputT, OutputT>
:- 用
ParDo
;执行 - 暴露于上下文(时间戳、窗口窗格等);
- 可以消耗侧输入;
- 可以产生多个输出或根本没有输出;
- 可以产生副产品;
- 可以使用 Beam 的持久状态 API;
- 动态输入;
- 示例用例:从流中读取对象、过滤、累积它们、执行聚合、转换它们并分派到不同的输出;
- 用
ParDos
您可以在开发指南中找到更具体的示例和用例。
这部分提到了MapElements
,这是 的用例SimpleFunctions