@Override public int getPartition( final GeoWaveInputKey key, final ObjectWritable val, final int numPartitions) { final byte[] grpIDInBytes = KeyManager.getGroup(key.getDataId().getBytes()); final int partition = hash(grpIDInBytes) % numPartitions; return partition; }
@Override protected void reduceNativeValues( final GeoWaveInputKey key, final Iterable<Object> values, final Reducer<GeoWaveInputKey, ObjectWritable, GeoWaveOutputKey, T>.Context context) throws IOException, InterruptedException { final String groupID = KeyManager.getGroupAsString(key.getDataId().getBytes()); for (final Object value : values) { final AnalyticItemWrapper<T> sampleItem = itemWrapperFactory.create((T) value); Integer outputCount = outputCounts.get(groupID); outputCount = outputCount == null ? Integer.valueOf(0) : outputCount; if ((outputCount == null) || (outputCount < maxCount)) { final AnalyticItemWrapper<T> centroid = createCentroid(groupID, sampleItem); if (centroid != null) { context.write( new GeoWaveOutputKey(sampleDataTypeName, indexNames), centroid.getWrappedItem()); outputCount++; outputCounts.put(groupID, outputCount); } } } }
@Override public void partitionWith(final PartitionData partitionData) throws Exception { outputValue.setInternalAdapterId(key.getInternalAdapterId()); AdapterWithObjectWritable.fillWritableWithAdapter( serializationTool, outputValue, key.getInternalAdapterId(), key.getDataId(), unwrappedValue); partitionDataWritable.setPartitionData(partitionData); context.write(partitionDataWritable, outputValue); } });
final String groupID = StringUtils.stringFromBinary(key.getDataId().getBytes()); final AnalyticItemWrapper<T> centroid = centroidManager.getCentroid(groupID); for (final Object value : values) {
private SimpleFeature getSimpleFeature(final GeoWaveInputKey key, final Object entry) { final Geometry geometry = dimExtractor.getGeometry(entry); final double[] extraDims = dimExtractor.getDimensions(entry); final String inputID = StringUtils.stringFromBinary(key.getDataId().getBytes()); final SimpleFeature pointFeature = AnalyticFeature.createGeometryFeature( outputAdapter.getFeatureType(), batchID, inputID, inputID, groupID, 0.0, geometry, dimExtractor.getDimensionNames(), extraDims, 1, 1, 0); return pointFeature; }
@Override protected void mapNativeValue( final GeoWaveInputKey key, final Object value, final org.apache.hadoop.mapreduce.Mapper<GeoWaveInputKey, ObjectWritable, GeoWaveInputKey, ObjectWritable>.Context context) throws IOException, InterruptedException { @SuppressWarnings("unchecked") final double rank = samplingFunction.rank(sampleSize, (T) value); if (rank > 0.0000000001) { final AnalyticItemWrapper<Object> wrapper = itemWrapperFactory.create(value); outputKey.setDataId( new ByteArray( keyManager.putData( nestedGroupCentroidAssigner.getGroupForLevel(wrapper), 1.0 - rank, // sorts // in // ascending // order key.getDataId().getBytes()))); outputKey.setInternalAdapterId(key.getInternalAdapterId()); outputKey.setGeoWaveKey(key.getGeoWaveKey()); context.write(outputKey, currentValue); } }