我们想出如何在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 {
...
答案 0 :(得分:5)
您不需要以不同方式创建CombineFn以使用Combine.PerKey。
您可以扩展AccumulatingCombineFn
(将合并逻辑放入累加器)或扩展CombineFn
(将合并逻辑放入CombineFn
)。还有其他选项,例如BinaryCombineFn
和IterableCombineFn
。
假设您有一个名为CombineFn<InputT, AccumT, OutputT>
的{{1}}:
combineFn
创建一个Combine.globally(combineFn)
,其中包含PTransform
并组合所有元素。 PCollection<InputT>
创建一个Combine.perKey(combineFn)
,其中包含PTransform
并合并与每个关键字相关联的所有值并组合它们。这相当于我相信你所指的PCollection<KV<K, InputT>>
。