Class Combine.AccumulatingCombineFn<InputT,AccumT extends Combine.AccumulatingCombineFn.Accumulator<InputT,AccumT,OutputT>,OutputT>

java.lang.Object
org.apache.beam.sdk.transforms.Combine.CombineFn<InputT,AccumT,OutputT>
org.apache.beam.sdk.transforms.Combine.AccumulatingCombineFn<InputT,AccumT,OutputT>
Type Parameters:
InputT - type of input values
AccumT - type of mutable accumulator values
OutputT - type of output values
All Implemented Interfaces:
Serializable, CombineFnBase.GlobalCombineFn<InputT,AccumT,OutputT>, HasDisplayData
Direct Known Subclasses:
ApproximateQuantiles.ApproximateQuantilesCombineFn, Top.TopCombineFn
Enclosing class:
Combine

public abstract static class Combine.AccumulatingCombineFn<InputT,AccumT extends Combine.AccumulatingCombineFn.Accumulator<InputT,AccumT,OutputT>,OutputT> extends Combine.CombineFn<InputT,AccumT,OutputT>
A CombineFn that uses a subclass of Combine.AccumulatingCombineFn.Accumulator as its accumulator type. By defining the operations of the Accumulator helper class, the operations of the enclosing CombineFn are automatically provided. This can reduce the code required to implement a CombineFn.

For example, the example from Combine.CombineFn above can be expressed using AccumulatingCombineFn more concisely as follows:


 public class AverageFn
     extends AccumulatingCombineFn<Integer, AverageFn.Accum, Double> {
   public Accum createAccumulator() {
     return new Accum();
   }
   public class Accum
       extends AccumulatingCombineFn<Integer, AverageFn.Accum, Double>
               .Accumulator {
     private int sum = 0;
     private int count = 0;
     public void addInput(Integer input) {
       sum += input;
       count++;
     }
     public void mergeAccumulator(Accum other) {
       sum += other.sum;
       count += other.count;
     }
     public Double extractOutput() {
       return ((double) sum) / count;
     }
   }
 }
 PCollection<Integer> pc = ...;
 PCollection<Double> average = pc.apply(Combine.globally(new AverageFn()));
 
See Also: