Pregunta

Usando solo un mapeador (un script de Python) y sin reductor, ¿cómo puedo generar un archivo separado con la clave como nombre de archivo, para cada línea de salida, en lugar de tener archivos largos de salida?

¿Fue útil?

Solución

Puede escribir en un archivo de texto en el sistema de archivos local utilizando las funciones de archivo de Python o si desea usar HDFS, use el API de ahorro .

Otros consejos

Las clases de formato de entrada y salida pueden reemplazarse mediante el uso de los parámetros de línea de comando -inputformat y -outputformat.

Un ejemplo de cómo hacerlo se puede encontrar en el proyecto dumbo , que es una pitón marco para escribir trabajos de transmisión. Tiene una función para escribir en múltiples archivos, e internamente reemplaza el formato de salida con una clase de su proyecto hermano, feathers - fm.last.feathers.output.MultipleTextFiles.

El reductor debe emitir una tupla como clave, siendo el primer componente de la tupla la ruta al directorio donde se deben escribir los archivos con los pares clave / valor. Todavía puede haber varios archivos, eso depende de la cantidad de reductores y la aplicación.

Recomiendo buscar en dumbo, tiene muchas características que hacen que sea más fácil escribir programas Map / Reduce en Hadoop en python.

¿Es posible reemplazar outputFormatClass cuando se usa la transmisión? En una implementación nativa de Java, ampliaría la clase MultipleTextOutputFormat y modificaría el método que nombra el archivo de salida. Luego defina su implementación como un nuevo formato de salida con el método setOutputFormat de JobConf

debe verificar, si esto también es posible en la transmisión. Yo no: - /

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top