Сериализация с использованием ArrayWritable, кажется, работает забавно

Я работал сArrayWritableв какой-то момент мне нужно было проверить, как Hadoop сериализуетArrayWritableэто то, что я получил, установивjob.setNumReduceTasks(0):

0    IntArrayWritable@10f11b8
3    IntArrayWritable@544ec1
6    IntArrayWritable@fe748f
8    IntArrayWritable@1968e23
11    IntArrayWritable@14da8f4
14    IntArrayWritable@18f6235

и это тестовый маппер, который я использовал:

public static class MyMapper extends Mapper<LongWritable, Text, LongWritable, IntArrayWritable> {

    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        int red = Integer.parseInt(value.toString());
        IntWritable[] a = new IntWritable[100];

        for (int i =0;i<a.length;i++){
            a[i] = new IntWritable(red+i);
        }

        IntArrayWritable aw = new IntArrayWritable();
        aw.set(a);
        context.write(key, aw);
    }
}

IntArrayWritable взят из примера, приведенного в Javadoc:ArrayWritable.

import org.apache.hadoop.io.ArrayWritable;
import org.apache.hadoop.io.IntWritable;

public class IntArrayWritable extends ArrayWritable {
    public IntArrayWritable() {
        super(IntWritable.class);
    }
}

Я на самом деле проверил исходный код Hadoop, и это не имеет смысла для меня.ArrayWritable не следует сериализовать имя класса и нет никакого способа, чтобы массив из 100IntWritable можно сериализовать с использованием шестнадцатеричных значений 6/7. Приложение на самом деле работает нормально, а редуктор десериализует правильные значения ... Что происходит? Что мне не хватает?

Ответы на вопрос(4)

Ваш ответ на вопрос