[Java] Cómo especificar KeyValueTextInputFormat Separator en Hadoop-.20 api?


Answers

Por favor, configure lo siguiente en el Código de Conducir.

conf.set("key.value.separator.in.input.line", ",");
Question

En la API nueva (apache.hadoop.mapreduce.KeyValueTextInputFormat), cómo especificar el separador (delimitador) que no sea tab (que es el predeterminado) para separar la clave y el valor.

Entrada de muestra:

one,first line
two,second line

Ouput requerido:

Key : one
Value : first line
Key : two
Value : second line

Estoy especificando KeyValueTextInputFormat como:

    Job job = new Job(conf, "Sample");

    job.setInputFormatClass(KeyValueTextInputFormat.class);
    KeyValueTextInputFormat.addInputPath(job, new Path("/home/input.txt"));

Esto funciona bien para tab como separador.




Es una cuestión de secuencia.

La primera línea conf.set("key.value.separator.in.input.line", ",") debe aparecer antes de crear una instancia de clase de Job . Asi que:

conf.set("key.value.separator.in.input.line", ","); 
Job job = new Job(conf);



De forma predeterminada, la clase KeyValueTextInputFormat usa tabulación como separador para la clave y el valor del archivo de texto de entrada.

Si desea leer la entrada de un separador personalizado, debe establecer la configuración con el atributo que está utilizando.

Para las nuevas API de Hadoop, es diferente:

conf.set("mapreduce.input.keyvaluelinerecordreader.key.value.separator", ";");