package mil.nga.giat.geowave.analytic.mapreduce.kde; import java.io.IOException; import org.apache.hadoop.io.DoubleWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.mapreduce.Mapper.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MapContextCellCounter implements CellCounter { private static final Logger LOGGER = LoggerFactory.getLogger(MapContextCellCounter.class); private final Context context; private final long minLevel; private final long maxLevel; private final long numLevels; private final long level; public MapContextCellCounter( final Context context, final long level, final long minLevel, final long maxLevel ) { this.context = context; this.level = level; this.minLevel = minLevel; this.maxLevel = maxLevel; numLevels = (maxLevel - minLevel) + 1; } @Override public void increment( final long cellId, final double weight ) { if (weight > 0) { try { context.write( new LongWritable( getCellId(cellId)), new DoubleWritable( weight)); } catch (IOException | InterruptedException e) { LOGGER.error( "Unable to write", e); } } } protected long getCellId( final long cellId ) { return (cellId * numLevels) + (level - minLevel); } }