如何在beam sdk 2.0中创建自定义Combine.PerKey

时间:2017-07-19 18:36:54

标签: google-cloud-dataflow

我们想出如何在beam sdk 2.0中创建自定义组合函数(经过大量猜测和梁sdk 2.0代码读取),因为数据流sdk 1.x语法在sdk 2.0中不起作用。

但是,我们无法弄清楚如何在 beam sdk 2.0 中创建自定义组合PER KEY 功能。任何帮助或指针(或更好的实际例子)将不胜感激。 (我们搜索了互联网上的文档或示例,但没有发现;我们也试图查看beam sdk 2.0&Combine类中的代码,但无法弄清楚,特别是因为PerKey类现在已经有了私有构造函数,所以我们不能再延长它。)

如果它有帮助,这里我们如何在beam sdk 2.0中正确创建自定义组合器(不带)键,但我们无法弄清楚如何创建一个< em> with 一把钥匙:

public class CombineTemplateIntervalsIntoBlocks
        extends Combine.AccumulatingCombineFn<ImmutableMySetOfIntervals, TemplateIntervalAccum, ArrayList<ImmutableMySetOfIntervals>>{


    public CombineTemplateIntervalsIntoBlocks() {
    }

    @Override
    public TemplateIntervalAccum createAccumulator() {
        return new TemplateIntervalAccum()
    }

然后

public class TemplateIntervalAccum
        implements Combine.AccumulatingCombineFn.Accumulator<ImmutableMySetOfIntervals, TemplateIntervalAccum, ArrayList<ImmutableMySetOfIntervals>>, Serializable {
...

1 个答案:

答案 0 :(得分:5)

您不需要以不同方式创建CombineFn以使用Combine.PerKey。

您可以扩展AccumulatingCombineFn(将合并逻辑放入累加器)或扩展CombineFn(将合并逻辑放入CombineFn)。还有其他选项,例如BinaryCombineFnIterableCombineFn

假设您有一个名为CombineFn<InputT, AccumT, OutputT>的{​​{1}}:

  • 您可以使用combineFn创建一个Combine.globally(combineFn),其中包含PTransform并组合所有元素。
  • 或者,您可以使用PCollection<InputT>创建一个Combine.perKey(combineFn),其中包含PTransform并合并与每个关键字相关联的所有值并组合它们。这相当于我相信你所指的PCollection<KV<K, InputT>>