Сериализация в Hadoop - доступная для записи

Это класс, который реализует Writable..

public class Test implements Writable {
    List<AtomicWritable> atoms = new ArrayList<AtomicWritable>();

    public void write(DataOutput out) throws IOException {
        IntWritable size = new IntWritable(atoms.size());
        size.write(out);
        for (AtomicWritable atom : atoms)
            atom.write(out);
    }

    public void readFields(DataInput in) throws IOException {
        atoms.clear();
        IntWritable size = new IntWritable();
        size.readFields(in);
        int n = size.get();
        while(n-- > 0) {
            AtomicWritable atom = new AtomicWritable();
            atom.readFields(in);
            atoms.add(atom);
        }
    }
}

Я буду очень признателен, если вы поможете мне понять, как вызывать метод write и readFields. По сути, я не понимаю, как построить тестовый объект в этом случае. Как только объект записан в DataOutput obj, как нам восстановить его в объекте DataInput. Это может звучать глупо, но я новичок в Hadoop, и ему был назначен проект, который использует Hadoop. Пожалуйста помоги.

Спасибо!!!

1 ответ

Решение

В основном я не понимаю, как построить Test объект в этом случае.

Да, вы упускаете суть. Если вам нужно построить экземпляр Test и заселить atoms тогда вам нужно добавить конструктор Test:

public Test(ArrayList<AtomicWritable> atoms) {
     this.atoms = atoms;
}

или вам нужно использовать конструктор по умолчанию и добавить метод или установщик, который позволяет вам добавлять элементы в atoms или установите значение atoms, Последнее на самом деле довольно распространено в среде Hadoop, чтобы иметь конструктор по умолчанию и set метод. ср., например, Text.set,

Ты не звонишь readFields а также write; платформа Hadoop делает это для вас, когда нужно сериализовать и десериализовать входы и выходы в и из map а также reduce,

Другие вопросы по тегам