Используя 0.20.2 ...
Возможно ли переопределить метод context.write()
в ReduceContext
? У меня есть целый набор редукторов, которые я хотел бы, чтобы все использовали определенную функцию перед каждым context.write()
, но я не хочу, чтобы они беспокоились об этой логике, просто чтобы она работала прозрачно.
Например:
Iterator<Text> vit = values.iterator();
if (trans2 != null) {
key = (Text) trans2.transform(key);
}
while (vit.hasNext()) {
Text item = vit.next();
if (trans1 != null) {
item = (Text) trans1.transform(item);
}
context.write(key, item);
}
Логика до / после записи часто отличается, и могут быть записи, которые происходят в разных случаях. Я хочу переместить функциональность if-> transform в функцию write (), чтобы я мог просто вызвать context.write(a,b)
вместо if (trans1 !=...
.
Моя конечная цель примерно такая:
protected void reduce(Text key, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
Iterator<Text> vit = values.iterator();
while (vit.hasNext())
context.write(key, vit.next());
}
С переопределением метода write ():
public void write(Text key, Text val) {
if (trans1 != null)
val = trans1.transform(val);
if (trans2 != null)
key = trans2.transform(key);
super.write(key,val);
}
или что-то подобное.