2012-07-11 18 views
6

Estoy escribiendo una función de mapa usando mrjob. Mi entrada vendrá de archivos en un directorio en HDFS. Los nombres de los archivos contienen una información pequeña pero crucial que no está presente en los archivos. ¿Hay alguna manera de aprender (dentro de una función de mapa) el nombre del archivo de entrada del cual proviene un par clave-valor?Cómo obtener el nombre del archivo de entrada en MRjob

Estoy buscando un equivalente de este código Java:

FileSplit fileSplit = (FileSplit)reporter.getInputSplit(); 
String fileName = fileSplit.getPath().getName(); 

gracias de antemano!

Respuesta

6

map.input.file propiedad dará el nombre de archivo de entrada.

Según la Hadoop - The Definitive Guide

Las propiedades se puede acceder desde la configuración del trabajo, obtenido en la antigua API MapReduce proporcionando una implementación del método configure() para Mapper o reductor, donde se pasa la configuración en como un argumento. En la nueva API, se puede acceder a estas propiedades desde el objeto de contexto pasado a todos los métodos de Mapper o Reducer.

+1

Y más información se pueden encontrar de respuesta anterior de Praveen a una pregunta similar a esto - http://stackoverflow.com/ preguntas/7449756/get-input-file-name-in-streaming-hadoop-program –

+4

Gracias, @PraveenSripati y @ChrisWhite, ¡esto es exactamente lo que necesitaba! Para indicarlo explícitamente para futuros visitantes: 'fileName = os.environ ['map_input_file']' hace el truco. – Bolo

5

Si está utilizando Hadoop 2.x con Python:

file_name = os.environ['mapreduce_map_input_file'] 
+0

¿Están listados en algún lugar en línea o tengo que buscar el código fuente para encontrarlos? – masu

+1

esto no funciona – Dinesh

Cuestiones relacionadas