package mil.nga.giat.geowave.mapreduce;
import java.io.IOException;
import mil.nga.giat.geowave.mapreduce.input.GeoWaveInputFormat;
import mil.nga.giat.geowave.mapreduce.input.GeoWaveInputKey;
import org.apache.hadoop.io.ObjectWritable;
import org.apache.hadoop.mapreduce.Mapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* This abstract class can be extended by GeoWave analytics. It handles the
* conversion of native GeoWave objects into objects that are writable. It is a
* mapper that converts to writable objects for the input. This conversion will
* only work if the data adapter implements HadoopDataAdapter.
*/
public abstract class GeoWaveWritableInputMapper<KEYOUT, VALUEOUT> extends
Mapper<GeoWaveInputKey, ObjectWritable, KEYOUT, VALUEOUT>
{
protected static final Logger LOGGER = LoggerFactory.getLogger(GeoWaveWritableInputMapper.class);
protected HadoopWritableSerializationTool serializationTool;
@Override
protected void map(
final GeoWaveInputKey key,
final ObjectWritable value,
final Mapper<GeoWaveInputKey, ObjectWritable, KEYOUT, VALUEOUT>.Context context )
throws IOException,
InterruptedException {
mapWritableValue(
key,
value,
context);
}
protected void mapWritableValue(
final GeoWaveInputKey key,
final ObjectWritable value,
final Mapper<GeoWaveInputKey, ObjectWritable, KEYOUT, VALUEOUT>.Context context )
throws IOException,
InterruptedException {
mapNativeValue(
key,
serializationTool.fromWritable(
key.getAdapterId(),
value),
context);
}
/**
* Helper method to create an object writable from a value managed by the
* adapter.
*
* @param key
* @param value
* @return
*/
protected ObjectWritable toWritableValue(
final GeoWaveInputKey key,
final Object value ) {
return serializationTool.toWritable(
key.getAdapterId(),
value);
}
protected abstract void mapNativeValue(
final GeoWaveInputKey key,
final Object value,
final Mapper<GeoWaveInputKey, ObjectWritable, KEYOUT, VALUEOUT>.Context context )
throws IOException,
InterruptedException;
@Override
protected void setup(
final Mapper<GeoWaveInputKey, ObjectWritable, KEYOUT, VALUEOUT>.Context context )
throws IOException,
InterruptedException {
serializationTool = new HadoopWritableSerializationTool(
GeoWaveInputFormat.getJobContextAdapterStore(context));
}
}