package com.hadooparchitecturebook.movingavg.trident; import backtype.storm.tuple.Values; import storm.trident.operation.Aggregator; import storm.trident.operation.BaseAggregator; import storm.trident.operation.TridentCollector; import storm.trident.tuple.TridentTuple; public class CalculateAverage extends BaseAggregator <CalculateAverage.AverageState> { static class AverageState { double sum = 0; } @Override public AverageState init(Object batchId, TridentCollector collector) { return new AverageState(); } @Override public void aggregate(AverageState state, TridentTuple tuple, TridentCollector collector) { state.sum = state.sum + Double.valueOf((Double)tuple.getValue(0)); } @Override public void complete(AverageState state, TridentCollector collector) { collector.emit(new Values(state.sum/5)); } }