如果您只想寫入減速器中最大鍵的值,我建議在配置中保存在您的映射器中檢測到的最大鍵。就像這樣:
Integer currentMax = null;
public void map(IntWritable key, Text value, Context){
if (currentMax == null){
currentMax = key.intValue();
}else{
currentMax = Math.max(currentMax.intValue(), key.get());
}
context.write(key, value);
}
protected void cleanup(){
if (currentMax!=null){
context.getConfiguration().set("biggestKey", currentMax.toString());
}
}
然後,在你減速機:
int biggestKey = -1;
protected void setup(Context context){
biggestKey = Integer.parseInt(context.getConfiguration().get("biggestKey"));
}
public void reduce(IntWritable key, Iterable<Text> values, Context context) {
if (biggestKey == key.get()) {
// write or whatever with the values of the biggest key
}
}
這樣你避免浪費內存和時間複製值。
這是棘手和不使用bigdata的力量。 – Turbero
@ Matt D:謝謝。有效。我是map-reduce編程的新手,並沒有完全意識到安裝和清理功能。 –