2011-08-11 2 views
4

나는 돼지 지식이 거의 없습니다. protobuf 형식의 데이터 파일이 있습니다. 이 파일을 돼지 스크립트에로드해야합니다. 로드하려면 LoadFunc UDF를 작성해야합니다. 말 기능은 Protobufloader()입니다.loadfunc 돼지를 사용하여 protobuf 형식 파일을 돼지 스크립트에로드 UDF

내 돼지 스크립트는 것

A = LOAD 'abc_protobuf.dat' USING Protobufloader() as (name, phonenumber, email); 

내가 알고 싶은 모든 내가 파일 입력 스트림을 얻는 방법이다. 일단 파일 입력 스트림을 받으면 protobuf 형식에서 PIG 튜플 형식으로 데이터를 구문 분석 할 수 있습니다.

PS : 사전에 감사

답변

6

트위터의 오픈 소스 라이브러리 코끼리 새가 많은 그런 로더 : https://github.com/kevinweil/elephant-bird

당신은 LzoProtobufB64LinePigLoader 및 LzoProtobufBlockPigLoader를 사용할 수 있습니다. https://github.com/kevinweil/elephant-bird/tree/master/src/java/com/twitter/elephantbird/pig/load

그것을 사용하려면, 당신은 할 필요가 :

define ProtoLoader com.twitter.elephantbird.pig.load.LzoProtobufB64LineLoader('your.proto.class.name'); 
a = load '/your/file' using ProtoLoader; 
b = foreach a generate 
    field1, field2; 

가로드 한 후, 자동으로 돼지로 변환됩니다 적절한 스키마를 튜플.

그러나 사용자는 데이터를 직렬화 된 protobuffer로 작성하고 lzo로 압축했다고 가정합니다.

com.twitter.elephantbird.pig.store 패키지에도 해당 작성자가 있습니다. 데이터 형식이 조금 다른 경우 코드를 사용자 지정 로더에 적용 할 수 있습니다.

+2

도 동일한 문제가 있습니다. 이 'your.proto.class.name'에 대한 실제 클래스 이름을 제공해 주실 수 있습니까? 그것은 나를 위해 도움이 될 것입니다. – venkat