代码之家  ›  专栏  ›  技术社区  ›  kaxil

阿帕奇光束:自由度和单函数有什么区别?

  •  2
  • kaxil  · 技术社区  · 6 年前

    在阅读关于使用Java处理Apache束流元素时,我遇到了 DoFn<InputT, OutputT> 然后穿过 SimpleFunction<InputT, OutputT> .

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

    有人能解释外行术语的区别吗?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Anton    6 年前

    从概念上讲,你可以想到 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