algunos enfoques, algunos más sucio que otros:
la manera correcta
Puede que tenga que definir su propio RecordReader, InputSplit y InputFormat. Dependiendo de lo que intente hacer exactamente, podrá reutilizar algunos de los tres anteriores. Probablemente tendrá que escribir su propio RecordReader para definir el par clave/valor y probablemente tendrá que escribir su propio InputSplit para ayudar a definir el límite.
Otra manera correcta, lo cual puede no ser posible
La tarea anterior es bastante desalentador. ¿Tienes algún control sobre tu conjunto de datos? ¿Puedes preprocesarlo de alguna manera (ya sea cuando está entrando o en reposo)? Si es así, debería considerar tratar de transformar su conjunto de datos en algo que sea más fácil de leer de manera inmediata en Hadoop.
Algo así como:
ALine1
ALine2 ALine1;Aline2;Aline3;Aline4
ALine3
ALine4 ->
BLine1
BLine2 BLine1;Bline2;Bline3;Bline4;
BLine3
BLine4
abajo y sucio
¿Tiene algún control sobre los tamaños de archivo de los datos? Si divide manualmente sus datos en el límite del bloque, puede forzar a Hadoop a que no le importen los registros que abarcan divisiones. Por ejemplo, si su tamaño de bloque es de 64 MB, escriba sus archivos en fragmentos de 60 MB.
Sin preocuparse por las divisiones de entrada, podría hacer algo sucio: en su función de mapa, agregue su nueva pareja clave/valor en un objeto de lista. Si el objeto de la lista tiene 4 elementos, haga el procesamiento, emita algo y limpie la lista. De lo contrario, no emita nada y continúe sin hacer nada.
La razón por la que tiene que dividir manualmente los datos es que no se le garantizará que se otorgue un registro completo de 4 filas a la misma tarea de mapa.
Gracias por su respuesta, yo estaba pensando en el segundo enfoque que usted sugiere, pero no es que también plagadas con el mismo problema? ¿Cómo leo cuatro líneas a la vez para anexarlas juntas y crear una sola línea? – Gitmo
Podrías escribir algo en Perl o Python que podría hacer el truco. Eso es lo que tenía en mente. –
Utilice [SequenceFile] (http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/SequenceFile.html) con compresión para un mejor rendimiento si se realiza el procesamiento previo del archivo . –