여러 개의 구분 된 입력 소스를 사용하는 MapReduce 작업을 작성하려고합니다. 모든 소스에는 동일한 정보가 들어 있지만 다른 열에있을 수 있으며 구분 기호는 소스마다 다를 수 있습니다. 소스는 구성 파일에 의해 매퍼에서 구문 분석됩니다. 이 구성 파일을 통해 사용자는 이러한 여러 구분 기호와 열 매핑을 제한 할 수 있습니다. 예를 들어MapReduce 작업에 여러 입력
, 입력 1은 1, 2, 15이 그 특성에 관한 입력 1의 열에있는 구성 등록
input1.separator=,
input1.id=1
input1.housename=2
input1.age=15
을 사용하여 해석한다.
따라서 매퍼는 각 입력 소스에 사용할 구성 속성을 알아야합니다. 나는 다른 사람들이 일을하고 컴파일러없이 새로운 입력을 추가하기를 원하기 때문에 이것을 하드 코딩 할 수는 없다.
명백한 해결책은 파일 이름을 분할에서 추출하고 그런 식으로 구성을 적용하는 것입니다.
예를 들어, "source1.txt"및 "source2.txt"라는 두 개의 파일을 입력한다고 가정합니다.
source1.separator=,
source1.id=2
...
source2.separator=|
source2.id=4
...
매퍼는 스플릿에서 파일 이름을 가져온 다음 동일한 접두사로 구성 속성을 읽습니다.
그러나 하이브웨어 하우스의 폴더를 가리키고있는 경우에는 사용할 수 없습니다. 나는 약간의 경로를 추출하여이를 사용할 수 있지만, 실제로는 그것이 우아하고 튼튼한 해결책이라고 생각하지 않습니다. 이 작업을 수행하는 더 쉬운 방법이 있습니까?
다른 파일들을 가지고 있다면'MultipleInputs'을 사용할 수 있습니다.그러나이 경우 pathExtraction이 유일한 방법 인 것 같습니다! – blackSmith
제안 된 솔루션과 다른 점은 무엇입니까? 여기서 MultipleInputs를 사용하고 있습니다. MultipleInputs는 파일 이름보다 폴더를 식별하기위한 추가 기능을 제공하지 않습니다. –