2011-08-11 12 views
4

私はブタに関する知識はほとんど持っていません。私はprotobuf形式のデータファイルを持っています。このファイルを豚のスクリプトに読み込む必要があります。ロードするためには、LoadFunc UDFを記述する必要があります。関数がProtobufloader()であるとします。loadfuncブタを使ってprotobuf形式のファイルをブタスクリプトに読み込むUDF

私PIGスクリプトは次のようになり

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

私が知りたいすべての私は、ファイル入力ストリームを取得するにはどうすればよいです。一度私はファイルの入力ストリームを保持し、私はprotobuf形式からPIGタプル形式にデータを解析することができます。

PS:事前のおかげで

答えて

6

Twitterのオープンソースライブラリエピオルニスあり、多くのそのようなローダ: 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

関連する問題