Как получить имя входного файла в MRjob

Я пишу функцию карты, используя mrjob. Мой ввод будет поступать из файлов в каталоге на HDFS. Имена файлов содержат небольшую, но важную информацию, которой нет в самих файлах. Есть ли способ узнать (внутри функции карты) имя входного файла, из которого исходит данная пара ключ-значение?

Я ищу эквивалент этого кода Java:

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

Заранее спасибо!


person Bolo    schedule 11.07.2012    source источник


Ответы (2)


map.input.file даст имя входного файла.

Согласно Hadoop — полное руководство

Доступ к свойствам можно получить из конфигурации задания, полученной в старом API MapReduce путем предоставления реализации метода configure() для Mapper или Reducer, где конфигурация передается в качестве аргумента. В новом API к этим свойствам можно получить доступ из объекта контекста, переданного всем методам Mapper или Reducer.

person Praveen Sripati    schedule 11.07.2012
comment
Дополнительную информацию можно найти в предыдущем ответе Правина на вопрос, подобный этому: stackoverflow.com/questions/7449756/ - person Chris White; 11.07.2012
comment
Спасибо, @PraveenSripati и @ChrisWhite, это именно то, что мне было нужно! Чтобы заявить это явно для будущих посетителей: fileName = os.environ['map_input_file'] делает свое дело. - person Bolo; 12.07.2012

Если вы используете HADOOP 2.x с Python:

file_name = os.environ['mapreduce_map_input_file']
person Boggio    schedule 26.06.2014
comment
Они перечислены где-то в Интернете или мне нужно просмотреть исходный код, чтобы найти их?! - person masu; 12.09.2014
comment
@masu, я думаю, что эти свойства автоматически устанавливаются инфраструктурой потоковой передачи Hadoop: stackoverflow.com/a/7452439/1389089 hadoop.apache.org/docs/r1.2.1/ - person shapiy; 08.05.2019