2012-07-11 23 views
6

Piszę funkcję mapy przy użyciu mrjob. Moje dane wejściowe będą pochodzić z plików w katalogu na HDFS. Nazwy plików zawierają małą, ale istotną informację o kawałku, której nie ma w plikach. Czy istnieje sposób na nauczenie się (w funkcji mapy) nazwy pliku wejściowego, z którego pochodzi dana para klucz-wartość?Jak uzyskać nazwę pliku wejściowego w MRjob

szukam odpowiednika tego kodu Java:

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

Z góry dzięki!

Odpowiedz

6

Właściwość podaje nazwę pliku wejściowego.

Według Hadoop - The Definitive Guide

Właściwości mogą być dostępne od konfiguracji Zadanie jest uzyskiwany w starym MapReduce API poprzez zapewnienie wdrażania metody configure() do mapowania lub reduktor, gdzie konfiguracja jest przekazywana jako argument. W nowym API te właściwości można uzyskać z obiektu kontekstowego przekazanego do wszystkich metod Mappera lub Redukcji.

+1

i więcej informacji można znaleźć od poprzedniej odpowiedzi praveen do pytania podobnego do tego - http://stackoverflow.com/ pytania/7449756/get-input-file-name-in-streaming-hadoop-program –

+4

Dzięki, @PraveenSripati i @ChrisWhite, to jest dokładnie to, czego potrzebowałem! Aby podać go jawnie dla przyszłych odwiedzających: 'fileName = os.environ ['map_input_file']' robi lewę. – Bolo

5

Jeśli używasz Hadoop 2.x z Python:

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

Czy są one wymienione gdzieś online lub czy muszę przeglądać kod źródłowy, aby je znaleźć ?! – masu

+1

to nie działa – Dinesh

Powiązane problemy