package mil.nga.giat.geowave.analytic.mapreduce.kde.compare; import java.io.IOException; import mil.nga.giat.geowave.analytic.mapreduce.kde.KDEJobRunner; import org.apache.hadoop.io.DoubleWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.mapreduce.Reducer; public class ComparisonCombiningStatsReducer extends Reducer<LongWritable, DoubleWritable, ComparisonCellData, LongWritable> { protected int minLevel; protected int maxLevel; protected int numLevels; @Override protected void setup( final Context context ) throws IOException, InterruptedException { minLevel = context.getConfiguration().getInt( KDEJobRunner.MIN_LEVEL_KEY, 1); maxLevel = context.getConfiguration().getInt( KDEJobRunner.MAX_LEVEL_KEY, 25); numLevels = (maxLevel - minLevel) + 1; super.setup(context); } @Override public void reduce( final LongWritable key, final Iterable<DoubleWritable> values, final Context context ) throws IOException, InterruptedException { double summer = 0; double winter = 0; for (final DoubleWritable v : values) { if (v.get() < 0) { winter = -v.get(); } else { summer = v.get(); } } context.write( new ComparisonCellData( summer, winter), key); collectStats( key.get(), context); } protected void collectStats( final long key, final Context context ) { final long level = (key % numLevels) + minLevel; context.getCounter( "Entries per level", "level " + Long.toString(level)).increment( 1); } }