Я наблюдаю неожиданное поведение, при котором я вижу пользовательский writable
, созданный при повторном использовании редуктора в том же редукторе.
Например
public class myWritable implements Writable {
private Map<Long, MyObject> myObjectMap = new HashMap<>();
private myInt;
@Override
public void write(DataOutput out) throws IOException {
out.writeInt(myInt);
out.writeInt(myObjectMap.size());
for (MyObject myObjectInstance: myObjectMap.values()) {
out.writeLong(myObjectInstance.getId());
}
}
@Override
public void readFields(DataInput in) throws IOException {
myInt = in.readInt();
int myObjectMapSize = in.readInt();
int myObjectId;
for (int i = 0; i < myObjectMapSize; i++) {
myObjectId = in.readLong();
myObjectMap.put(myObjectId, new MyObject(myObjectId));
}
}
}
Я считаю, что myObjectMap
просто увеличивает размер последующих ключей, которые я обработал. Это означает, что каждый редуктор повторно использует созданный доступный для записи экземпляр.
Это не имеет для меня никакого смысла, так как я не вижу такого поведения, документированного в doc
Я что-то не так делаю?