Para utilizar efectivamente trabajos de reducción de mapas en Hadoop, necesito que los datos se almacenen en hadoop's sequence file format. Sin embargo, actualmente los datos solo están en formato .txt plano. ¿Alguien puede sugerir una forma de convertir un archivo .txt a un archivo de secuencia?Cómo convertir archivos .txt a formato de archivo de secuencia de Hadoop
Respuesta
Así que la respuesta más simple es solo un trabajo de "identidad" que tiene un resultado de SequenceFile.
es la siguiente con 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);
}
Depende del 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 tu mapeador puedes analizar esa línea y usarla de la forma que elijas.
Si no es una línea por registro, es posible que deba escribir su propia implementación InputFormat. Eche un vistazo al this tutorial para más información.
Si los datos no está en HDFS, es necesario cargarlo en HDFS. Dos opciones:
i) hdfs: ingrese su archivo .txt y una vez que lo obtenga en HDFS, puede convertirlo a un archivo seq.
ii) Toma el archivo de texto como entrada en su cuadro de cliente HDFS y lo convierte a SeqFile utilizando las API de archivo de secuencia creando un SequenceFile.Writer y anexándolo (clave, valores).
Si no le importa la clave, puede hacer que el número de línea sea la clave y completar el texto como valor.
Necesito usar la primera opción. ¿Cómo puedo hacerlo? – zohar
También puede simplemente crear una tabla intermedia, CARGAR DATOS el contenido del CSV directamente en él, luego crear una segunda tabla como archivo de secuencia (particionado, agrupado, etc.) e insertarlo en la selección de la tabla intermedia. También puede definir las opciones de compresión, por ejemplo,
set hive.exec.compress.output = true;
set io.seqfile.compression.type = BLOCK;
set mapred.output.compression.codec = org.apache.hadoop.io.compress.SnappyCodec;
create table... stored as sequencefile;
insert overwrite table ... select * from ...;
El marco MR entonces hacerse cargo de la heavylifting para usted, que le ahorra la molestia de tener que escribir código Java.
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% s\t% s\n", writer.getLength(), key, value);
writer.append(key, value); }
} finally
{ IOUtils.closeStream(writer);
}
}
}
ejemplo bueno y simple! – user249654
¿Qué es uri está aquí? –
si ha instalado Mahout - ha llamado algo: seqdirectory - que puede hacerlo
- 1. Secuencia de archivos en Hadoop
- 2. Convertir archivo txt a csv en powershell
- 3. Cómo convertir el archivo * .txt en Unicode
- 4. Cómo convertir archivos de configuración symfony yaml a formato xml
- 5. Cómo convertir archivos wmf a archivos svg
- 6. Convertir de formato largo a formato
- 7. Convierte archivos .odt .doc .ods a archivos .txt
- 8. Usando ffmpeg convertir un archivo de un formato a otro
- 9. convertir tiff a formato jpg
- 10. Cómo convertir a formato JSON de D3?
- 11. ¿Cómo convertir formato de fecha a palabra?
- 12. ¿Cómo puedo convertir archivos TTF a formato OTF?
- 13. ¿Hay alguna manera de convertir el documento de Word de Microsoft al formato de archivo .txt del bloc de notas?
- 14. ¿Puedo convertir un archivo .swf a un formato de imagen?
- 15. Cómo convertir el archivo vdproj a formato WiX?
- 16. Generación de archivos de salida independiente en Hadoop Transmisión
- 17. ¿Cómo convertir el formato de archivo Excel a G-Sheet mediante la carga de Drive API?
- 18. ¿Convertir formato PSD a Android XML (formato)?
- 19. Cómo enviar la lista de archivos en una carpeta a un archivo txt en Linux
- 20. Convertir secuencia de imágenes de archivo de vídeo java androide
- 21. ruta del archivo Formato de Windows a formato Java
- 22. Convertir un archivo txt de ANSI a UTF-8 mediante programación
- 23. fecha sql convertir a formato de cadena
- 24. Convertir a formato de la lista IEnumerable
- 25. Crear un archivo RDF usando un archivo txt como entrada
- 26. cómo dar un nombre personalizado a los archivos de salida de hadoop
- 27. Cómo convertir un archivo F4F a MP4?
- 28. Convertir castillo de arena de salida Generador de Archivo de ayuda (sitio web) a formato MediaWiki
- 29. Exportación de Mathematica Imprimir [] Salida a un archivo .txt
- 30. Convertir XML a formato JSON
Por lo tanto, si tengo 100 archivos .txt esto me dará 100 .seq, ¿verdad? ¿Qué pasa si quiero 1 gran archivo .seq? – dranxo
Supongo que: job.setNumReduceTasks (1); – dranxo
@rcompton sí exactamente –