Clases de lector de texto en Hadoop

Tengo un directorio OUTPUT donde tengo los archivos de salida de un trabajo de Map Reduce. Los archivos de salida son archivos de texto escritos con TextOutputFormat.

Ahora quiero leer los pares de valores clave del archivo de salida. ¿Cómo puedo hacerlo usando algunas clases existentes en hadoop? Una forma en que podría hacerlo era la siguiente

FileSystem fs = FileSystem.get(conf);
FileStatus[] files = fs.globStatus(new Path(OUTPUT + "/part-*"));
for(FileStatus file:files){
  if(file.getLen() > 0){
    FSDataInputStream in = fs.open(file.getPath());
    BufferedReader bin = new BufferedReader(new InputStreamReader(
        in));
    String s = bin.readLine();
    while(s!=null){
      System.out.println(s);
      s = bin.readLine();
    }
    in.close();
  }
}

Este enfoque funcionaría, pero aumenta mucho mi tarea, ya que ahora necesito analizar manualmente los pares de valores clave de cada línea individual. Estoy buscando algo más útil que me permita leer directamente la clave y el valor en algunas variables.

preguntado el 12 de junio de 12 a las 16:06

1 Respuestas

¿Estás obligado a usar TextOutputFormat como su formato de salida en el trabajo anterior?

De lo contrario, considere usar SequenceFileOutputFormat, luego puede usar SequenceFile.Reader para leer el archivo en pares de clave/valor. También puede 'ver' el archivo usando hadoop fs -text path/to/output/part-r-00000

EDITAR: También puedes usar el KeyValueLineRecordReader clase, solo tendrá que pasar un FileSplit al constructor.

Respondido el 14 de junio de 12 a las 13:06

Estoy usando TextOutputFormat porque necesito que los archivos de salida sean legibles por humanos. Ya consideré lo que sugeriste, aunque gracias, ese sería mi último recurso. - Apurv

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.