Saltar al contenido

Cómo convertir un archivo .txt al formato de archivo de secuencia de Hadoop

Te doy la bienvenida a nuestro sitio web, aquí hallarás la solucíon de lo que andabas buscando.

Solución:

Entonces, la respuesta más simple es solo un trabajo de “identidad” que tiene una salida SequenceFile.

Se ve así en java:

    public static void main(String[] args) throws IOException,
        InterruptedException, ClassNotFoundException 

    Configuration conf = new Configuration();
    Job job = new Job(conf);
    job.setJobName("Convert Text");
    job.setJarByClass(Mapper.class);

    job.setMapperClass(Mapper.class);
    job.setReducerClass(Reducer.class);

    // increase if you need sorting or a special number of files
    job.setNumReduceTasks(0);

    job.setOutputKeyClass(LongWritable.class);
    job.setOutputValueClass(Text.class);

    job.setOutputFormatClass(SequenceFileOutputFormat.class);
    job.setInputFormatClass(TextInputFormat.class);

    TextInputFormat.addInputPath(job, new Path("/lol"));
    SequenceFileOutputFormat.setOutputPath(job, new Path("/lolz"));

    // submit and wait for completion
    job.waitForCompletion(true);
   

import java.io.IOException;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.Text;

//White, Tom (2012-05-10). Hadoop: The Definitive Guide (Kindle Locations 5375-5384). OReilly Media - A. Kindle Edition. 

public class SequenceFileWriteDemo  

    private static final String[] DATA =  "One, two, buckle my shoe", "Three, four, shut the door", "Five, six, pick up sticks", "Seven, eight, lay them straight", "Nine, ten, a big fat hen" ;

    public static void main( String[] args) throws IOException  
        String uri = args[ 0];
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create( uri), conf);
        Path path = new Path( uri);
        IntWritable key = new IntWritable();
        Text value = new Text();
        SequenceFile.Writer writer = null;
        try  
            writer = SequenceFile.createWriter( fs, conf, path, key.getClass(), value.getClass());
            for (int i = 0; i < 100; i ++)  
                key.set( 100 - i);
                value.set( DATA[ i % DATA.length]);
                System.out.printf("[% s]t% st% sn", writer.getLength(), key, value); 
                writer.append( key, value);  
         finally 
         IOUtils.closeStream( writer); 
         
     

Depende de cuál sea el formato del archivo TXT. ¿Es una línea por registro? Si es así, simplemente puede usar TextInputFormat que crea un registro para cada línea. En su mapeador puede analizar esa línea y usarla de la forma que elija.

Si no es una línea por registro, es posible que deba escribir su propia implementación de InputFormat. Echa un vistazo a este tutorial para obtener más información.

Comentarios y puntuaciones

Al final de la web puedes encontrar las referencias de otros programadores, tú aún puedes dejar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *