La serialización con ArrayWritable parece funcionar de manera divertida

Estaba trabajando conArrayWritable, en algún momento tuve que comprobar cómo Hadoop serializa laArrayWritable, esto es lo que obtuve al configurarjob.setNumReduceTasks(0):

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

y este es el mapeador de prueba que estaba 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 se toma del ejemplo dado en el javadoc: ArrayWritable.

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

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

Realmente verifiqué el código fuente de Hadoop y esto no tiene sentido para mí. @ArrayWritable no debe serializar el nombre de la clase y no hay forma de que una matriz de 100IntWritable se puede serializar utilizando valores hexadecimales 6/7. La aplicación en realidad parece funcionar bien y el reductor deserializa los valores correctos ... ¿Qué está pasando? ¿Qué me estoy perdiendo

Respuestas a la pregunta(4)

Su respuesta a la pregunta