4

私は豚の知識がほとんどありません。protobuf 形式のデータ ファイルがあります。このファイルを pig スクリプトにロードする必要があります。それをロードするには、LoadFunc UDF を作成する必要があります。言う機能がございますProtobufloader()

私のPIGスクリプトは

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

私が知りたいのは、ファイル入力ストリームを取得する方法です。ファイル入力ストリームを取得したら、データを protobuf 形式から PIG タプル形式に解析できます。

PS: よろしくお願いします

4

1 に答える 1

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;

ロード後、適切なスキーマを持つ pig タプルに自動的に変換されます。

ただし、シリアル化されたプロトバッファにデータを書き込み、lzo で圧縮することを前提としています。

パッケージ com.twitter.elephantbird.pig.store には、対応するライターもあります。データ形式が少し異なる場合は、そのコードをカスタム ローダーに適合させることができます。

于 2011-08-12T07:49:19.963 に答える