首页 > 解决方案 > Apache Beam:DoFn 和 SimpleFunction 有什么区别?

问题描述

在阅读有关使用 Java 处理 Apache Beam 中的流媒体元素时,我遇到了DoFn<InputT, OutputT>,然后遇到了SimpleFunction<InputT, OutputT>.

这两个看起来都与我相似,我发现很难理解其中的区别。

有人可以用外行术语解释区别吗?

标签: javaapache-beam

解决方案


从概念上讲,您可以想到SimpleFunction一个简单的案例DoFn

  • SimpleFunction<InputT, OutputT>

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

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

ParDos您可以在开发指南中找到更具体的示例和用例。

这部分提到了MapElements,这是 的用例SimpleFunctions


推荐阅读