Доступный для записи экземпляр повторно используется в hadoop в том же редукторе - PullRequest
0 голосов
/ 29 августа 2018

Я наблюдаю неожиданное поведение, при котором я вижу пользовательский 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

Я что-то не так делаю?

...