在次要排序示例年份和温度。我们把年份和温度作为复合键。并打印第一个键值对以打印当年的最高温度。
1900 35°C
1900 34°C
1900 34°C
...
1901年36°C
1901年35°C
protected void reduce(IntPair key, Iterable<NullWritable> values,
Context context) throws IOException, InterruptedException {
context.write(key, NullWritable.get());
}
现在,如果我们想要打印特定年份的第二个最大值,我们怎么能这样做。
答案 0 :(得分:0)
设置方式您无法执行此操作,temperature
也需要设置为值,因此您的reduce
方法签名需要更改为:< / p>
protected void reduce(IntPair key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
...
}
使用辅助排序的目标是使用复合键对值进行排序,以便设置NullWritable
,因为该值将阻止此工作。一旦你有了温度值,你可以迭代它们并忽略第一个值,从而获得第二个最大值。例如:
protected void reduce(IntPair key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
boolean first = true;
for (IntWritable temp : values) {
if (!first) {
context.write(key, temp);
return;
} else {
first = false;
}
}
}
既然温度是你可以迭代它们的值,忽略第一个,写出第二个并退出。
注意:此代码假定温度没有重复。