Tengo un archivo secuencial que es el resultado del trabajo hadoop map-reduce. En este archivo, los datos se escriben en pares de valores clave, y el valor en sí es un mapa. Quiero leer el valor como un objeto MAP para que pueda procesarlo más.¿Cómo se lee el archivo secuencial de hadoop?
Configuration config = new Configuration();
Path path = new Path("D:\\OSP\\sample_data\\data\\part-00000");
SequenceFile.Reader reader = new SequenceFile.Reader(FileSystem.get(config), path, config);
WritableComparable key = (WritableComparable) reader.getKeyClass().newInstance();
Writable value = (Writable) reader.getValueClass().newInstance();
long position = reader.getPosition();
while(reader.next(key,value))
{
System.out.println("Key is: "+textKey +" value is: "+val+"\n");
}
salida del programa: Clave es: [esto es clave] valor es: {abc = 839177, xyz = 548 498, LMN = 2, PQR = 1} valor
Aquí estoy recibiendo como cadena , pero lo quiero como un objeto de mapa.
¿De dónde viene 'val' from? Y un Mapa no es 'Writable', ¿qué estás usando para las clases en tu trabajo m/r? –
Acabo de tener el archivo secuencial y no estoy al tanto de lo que están haciendo en el trabajo de reducción de mapa. Y se me proporciona la siguiente información. "Cada archivo debe abrirse como un archivo de secuencia. Se debe usar un códec de descompresión - la clase del archivo de secuencia parece ser capaz de decirle qué códec de compresión usar, y luego creo que cada clave y cada valor está codificado utilizando TypedBytes ". – samarth
Luego debe obtener las clases de la clave y los valores, de lo contrario no los deserializará correctamente. –