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】:

从概念上你可以认为SimpleFunctionDoFn 的一个简单案例:

SimpleFunction<InputT, OutputT>:

简单的输入到输出的映射函数; 单输入产生单输出; 静态类型,你必须@Overrideapply()方法; 不依赖于计算上下文; 无法使用 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

将 PANDAS 与 Apache Beam 一起使用

Python Apache Beam 侧输入断言错误

如何在 python apache Beam 的窗口中订购元素?

无法从 Beam 中的 GCS 读取 PubSub gz 文件