A serialização usando ArrayWritable parece funcionar de uma maneira engraçada

Eu estava trabalhando comArrayWritable, em algum momento eu precisava verificar como o Hadoop serializa oArrayWritable, foi o que obtive ao definirjob.setNumReduceTasks(0):

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

e este é o mapeador de teste que eu estava usando:

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 é retirado do exemplo dado no javadoc: ArrayWritable.

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

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

Na verdade, verifiquei o código fonte do Hadoop e isso não faz sentido para mim.ArrayWritable não deve serializar o nome da classe e não há como uma matriz de 100IntWritable pode ser serializado usando valores hexadecimais 6/7. O aplicativo realmente parece funcionar bem e o redutor desserializa os valores certos ... O que está acontecendo? O que estou perdendo

questionAnswers(4)

yourAnswerToTheQuestion