2012-07-11 30 views
6

Sto scrivendo una funzione mappa utilizzando mrjob. Il mio input verrà dai file in una directory su HDFS. I nomi dei file contengono informazioni di un pezzo piccolo ma cruciale che non sono presenti nei file. C'è un modo per imparare (all'interno di una funzione mappa) il nome del file di input da cui proviene una determinata coppia valore-chiave?Come ottenere il nome del file di input in MRjob

Sto cercando un equivalente di questo codice Java:

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

Grazie in anticipo!

risposta

6

map.input.file proprietà fornirà il nome del file di input.

Secondo la Hadoop - The Definitive Guide

Le proprietà sono accessibili dalla configurazione del lavoro, ottenuta nel vecchio MapReduce API fornendo un'implementazione del metodo configure() per Mapper o riduttore, dove passa la configurazione come argomento. Nella nuova API, è possibile accedere a queste proprietà dall'oggetto di contesto passato a tutti i metodi di Mapper o Reducer.

+1

e ulteriori informazioni possono essere trovate dal precedente risposta di Praveen ad una domanda simile a questo - http://stackoverflow.com/ domande/7449756/get-input-nome-file-in-streaming-hadoop-programma –

+4

Grazie, @PraveenSripati e @ChrisWhite, questo è esattamente ciò di cui avevo bisogno! Per dichiararlo esplicitamente per i futuri visitatori: 'fileName = os.environ ['map_input_file']' fa il trucco. – Bolo

5

Se si utilizza HADOOP 2.x con Python:

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

Queste sono elencate da qualche parte online o devo sfogliare il codice sorgente per trovarle ?! – masu

+1

questo non funziona – Dinesh

Problemi correlati