public void reduce(FloatWritable key,Iterator<Text> values,OutputCollector<Text,FloatWritable> output,Reporter reporter) throws IOException {
  float val=key.get();
  FloatWritable number=new FloatWritable(val == 0 ? 0 : -val);
  long numCollected=0;
  while (values.hasNext() && (numCollected < topn)) {
    Text url=WritableUtils.clone(values.next(),conf);
    output.collect(url,number);
    numCollected++;
  }
}

public void reduce ( FloatWritable key , Iterator < Text > values , OutputCollector < Text , FloatWritable > output , Reporter reporter ) throws IOException { float val = key . get ( ) ; FloatWritable number = new FloatWritable ( val == 0 ? 0 : - val ) ; long numCollected = 0 ; while ( values . hasNext ( ) && ( numCollected < topn ) ) { Text url = WritableUtils . clone ( values . next ( ) , conf ) ; output . collect ( url , number ) ; numCollected ++ ; } }
flips and collects the url and numeric sort value .
