2014-07-25 4 views
3

돼지를 사용하여 Hadoop을 사용하여 많은 로그 파일을 분석하기 시작했으며 이전 계산 결과에 따라 다른 파일을로드해야합니다. 예를 들어 계산 결과가 0x18e0이면 0x18e0.txt라는 파일을로드해야합니다. LOAD 문에서 매개 변수화 된 파일 이름을 어떻게 제공합니까? 돼지에서이 작업을 수행 할 수있는 유사 간단한 방법이 있나요수행 방법 Apache Pig에서 매개 변수화 된 이름의 파일로드

x = str(var)  
File = open(x + '.txt', 'r') 

: 파이썬에서

, 그것은 이렇게 정말 간단합니다? 내가 스크립트를 실행하기 전에 내가 x의 값을 모르기 때문에 나는 x.txt

=

돼지 -param 입력과 같은 명령 줄에 입력을 줄 수 없다.

https://wiki.apache.org/pig/ParameterSubstitution에 설명 된 것처럼 입력 파일 자체를 매개 변수로 지정하는 다른 옵션이 있지만 과도하게 원형으로 보입니다. 이것에 대한 또 다른 해결책이 있습니까?

+0

어떤 종류의 값을 사용할 수 있습니까? –

+0

위의 예를 들었습니다. x는 단지 문자열입니다. 필자의 경우, x는 텍스트 파일로 만들기 위해 .txt와 연결된 문자열로 표현되는 16 진수입니다. – Ahmis

+1

'% declare'는 당신의 필요에 대답할까요? – fxm

답변

0

당신은이 작업을 수행 할 수 있습니다 : (a)는 명령 행에서 사전 처리를하고, 또는 (b) declare를 사용하고 bash는 스크립트 호출 :

접근 방식을 (A) 사이에 간다 무엇 이건이 예에서 역 따옴표 (`)는 파일의 이름으로 사용할 16 진수 결과 전처리입니다 :

돼지 -param 입력 =`HDFS DFS - 고양이 file_list.txt | awk 'BEGIN {ORS = "";} { (NR == 1) 인 경우; else print ","$ 0;} '.txt script.pig

접근법 (b). !

#/빈/bash는

#HERE 당신이 그런 돼지를 16 진수

를 출력 코드를 입력 : 당신이 X하는 데 필요한 처리를 수행하는 bash는 스크립트를 작성 스크립트는 다음과 같습니다.

퍼센트 선언의 X`/ my_script.sh`을

...

접근법 (b)에서는 명령 줄 도구와 백틱 (그림과 같이)을 사용하여 사전 처리를 수행 할 수 있기 때문에 Bash 스크립트를 작성할 필요가 없습니다.

비슷한 접근법이 다른 StackOverflow 답변에서 제안되었습니다. 자세한 내용은 herehere입니다.