2012-07-11 5 views
6

mrjob을 사용하여지도 함수를 작성하고 있습니다. 내 입력은 HDFS의 디렉토리에있는 파일에서 가져옵니다. 파일의 이름에는 파일에 존재하지 않는 작지만 중요한 조각 정보가 들어 있습니다. 주어진 키 - 값 쌍이 나오는 입력 파일의 이름을 (지도 함수 내에서) 배우는 방법이 있습니까?MRjob에서 입력 파일 이름을 얻는 방법

나는이 자바 코드의 상당 찾고 있어요 : 사전에

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

감사합니다!

답변

6

map.input.file 속성은 입력 파일 이름을 제공합니다. 구성이 전달됩니다 매퍼 또는 감속기에 대한 구성() 메소드의 구현을 제공함으로써 기존의 맵리 듀스 API에서 얻어진 특성이 작업의 구성에서 액세스 할 수있는 Hadoop - The Definitive Guide

에 따르면,

안으로 인수. 새 API에서 이러한 속성은 Mapper 또는 Reducer의 모든 메서드에 전달 된 컨텍스트 개체에서 액세스 할 수 있습니다.

+1

그리고 더 많은 정보를이 비슷한 질문에 프라 빈의 이전 답변에서 찾을 수 있습니다 - http://stackoverflow.com/ 질문/7449756/get-input-file-name-in-streaming-hadoop-program –

+4

감사합니다, @PraveenSripati 및 @ChrisWhite, 이것이 내가 필요한 것입니다! 미래 방문자를 위해 명시 적으로 명시하려면 :'fileName = os.environ [ 'map_input_file']'트릭을 수행합니다. – Bolo

5

파이썬으로 하둡 2.x를를 사용하는 경우 :

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

온라인 어딘가에 나열되어 있습니까? 아니면 소스 코드를 찾아서 찾아야합니까?! – masu

+1

이것이 작동하지 않습니다. – Dinesh

관련 문제