2014-11-07 3 views
2

JAR 파일을 사용하고 그 기능을 파이썬 스크립트로 가져 오려고합니다. JAR 파일은 내 파이썬 스크립트와 돼지 스크립트Python 스크립트에 JAR 파일 추가하기

script.py

import sys 
sys.path.append('/home/hadoop/scripts/jyson-1.0.2.jar') 
from com.xhaus.jyson import JysonCodec as json 

@outputSchema('output_field_name:chararray') 
def get_team(arg0): 
    return json.loads(arg0) 

script.pig과 같은 디렉토리에 있습니다

register 'script.py' using jython as script_udf; 

a = LOAD 'data.json' USING PigStorage('*') as (line:chararray); 
teams = FOREACH a GENERATE script_udf.get_team(line); 
dump teams; 

그것은 매우 간단한 UDF입니다 내가 사용하려고 시도하고 있지만, 어떤 이유로 든 항상 "xhaus라는 모듈이 없습니다"라는 오류가 발생합니다. 그 항아리에있는 모든 수업이 있습니다.

$ jar tf jyson-1.0.2.jar 
META-INF/ 
META-INF/MANIFEST.MF 
com/ 
com/xhaus/ 
com/xhaus/jyson/ 
com/xhaus/jyson/JSONDecodeError.class 
com/xhaus/jyson/JSONEncodeError.class 
com/xhaus/jyson/JSONError.class 
com/xhaus/jyson/JysonCodec.class 
com/xhaus/jyson/JysonDecoder.class 
com/xhaus/jyson/JysonEncoder.class 

그래서 xhaus가 항아리에 존재합니다. 그러나 어떤 이유에서 이것이 선택되지 않았습니다. 몇 가지 자습서를 보면 스크립트를 잘 실행할 수 있습니다. 나는 어리석은 세부 사항을 놓칠지도 모른다. 도와주세요.

편집 :이 스크립트는 돼지에 의해 실행되는

. 그래서 돼지 스크립트는 파이썬 스크립트를 호출합니다. 파이썬 스크립트는 JysonCodec 클래스를 사용합니다.

pig script.pig 
+0

Python 또는 Jython에서 이것을 실행하고 있습니까? –

+0

스크립트가 어떻게 실행되고 있는지 알려주도록 편집했습니다. – macha

답변

1

돼지지도 축소 모드에서이 스크립트를 실행하는 경우 작업 런타임에 jar를 사용할 수 있도록해야합니다. 당신의 돼지 스크립트의 상단에 당신은

REGISTER /home/hadoop/scripts/jyson-1.0.2.jar; 

그런 다음 당신은 당신의 UDF 스크립트에서 sys.path.append('/home/hadoop/scripts/jyson-1.0.2.jar') 을 주석하는 데 필요한 다음 줄을 추가해야합니다. 항아리의 클래스는 돼지 스크립트로 등록 했으므로 이미 udf에서 사용할 수 있습니다. 변경할 필요가 있습니다. sys.path

희망이 있습니다.

+0

안녕하세요, Sayan, "mapreduce 모드의 돼지"는 무엇입니까? 단순히 "pig script.pig" – macha

+0

'map reduce' 모드를 사용하여 스크립트를 실행하는 것은 Hadoop 위에 실행하는 것입니다. 나는 당신의 경우에 그것이 기본적으로 있다고 생각합니다. 그래서 'pig script.pig'가 작동해야합니다. jar 파일을 등록해야하는 이유는 파이썬 스크립트 –

+0

@macha를 등록하는 것처럼 jar를 분산 캐시에 사용할 수 있도록해야하기 때문입니다. –