package mil.nga.giat.geowave.analytic.mapreduce.kmeans.runner; import mil.nga.giat.geowave.analytic.PropertyManagement; import mil.nga.giat.geowave.analytic.clustering.CentroidManagerGeoWave; import mil.nga.giat.geowave.analytic.clustering.NestedGroupCentroidAssignment; import mil.nga.giat.geowave.analytic.mapreduce.CountofDoubleWritable; import mil.nga.giat.geowave.analytic.mapreduce.GeoWaveAnalyticJobRunner; import mil.nga.giat.geowave.analytic.mapreduce.GeoWaveOutputFormatConfiguration; import mil.nga.giat.geowave.analytic.mapreduce.GroupIDText; import mil.nga.giat.geowave.analytic.mapreduce.MapReduceJobRunner; import mil.nga.giat.geowave.analytic.mapreduce.kmeans.UpdateCentroidCostMapReduce; import mil.nga.giat.geowave.analytic.param.CentroidParameters; import mil.nga.giat.geowave.analytic.param.ParameterEnum; import mil.nga.giat.geowave.mapreduce.output.GeoWaveOutputKey; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.mapreduce.Job; import org.opengis.feature.simple.SimpleFeature; /** * Update the centroid with its cost, measured by the average distance of * assigned points. * * */ public class UpdateCentroidCostJobRunner extends GeoWaveAnalyticJobRunner implements MapReduceJobRunner { public UpdateCentroidCostJobRunner() { super.setOutputFormatConfiguration(new GeoWaveOutputFormatConfiguration()); } @Override public Class<?> getScope() { return UpdateCentroidCostMapReduce.class; } @Override public int run( final Configuration config, final PropertyManagement runTimeProperties ) throws Exception { CentroidManagerGeoWave.setParameters( config, getScope(), runTimeProperties); NestedGroupCentroidAssignment.setParameters( config, getScope(), runTimeProperties); runTimeProperties.setConfig( new ParameterEnum[] { CentroidParameters.Centroid.WRAPPER_FACTORY_CLASS }, config, getScope()); return super.run( config, runTimeProperties); } @Override public void configure( final Job job ) throws Exception { job.setMapperClass(UpdateCentroidCostMapReduce.UpdateCentroidCostMap.class); job.setMapOutputKeyClass(GroupIDText.class); job.setMapOutputValueClass(CountofDoubleWritable.class); job.setCombinerClass(UpdateCentroidCostMapReduce.UpdateCentroidCostCombiner.class); job.setReducerClass(UpdateCentroidCostMapReduce.UpdateCentroidCostReducer.class); job.setReduceSpeculativeExecution(false); job.setOutputKeyClass(GeoWaveOutputKey.class); job.setOutputValueClass(SimpleFeature.class); } @Override protected String getJobName() { return "Update Centroid Cost"; } }