Загрузка файла формата protobuf в скрипт pig с использованием loadfunc pig UDF - PullRequest
4 голосов
/ 11 августа 2011

У меня очень мало знаний о свинье.У меня есть файл данных в формате protobuf.Мне нужно загрузить этот файл в сценарий свиньи.Мне нужно написать LoadFunc UDF, чтобы загрузить его.скажем, функция Protobufloader().

Мой PIG-скрипт будет

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

Все, что я хочу знать, это как получить поток ввода файла.Получив поток ввода файлов, я могу проанализировать данные из формата protobuf в формат кортежа PIG.

PS: спасибо заранее

1 Ответ

6 голосов
/ 12 августа 2011

Библиотека с открытым исходным кодом 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;

После загрузки он будет автоматически переведен в свиные кортежи с правильной схемой.

Однако, они предполагают, что вы записываете свои данные в сериализованный протобуфер и сжимаете с помощью lzo.

У них также есть соответствующие средства записи в пакете com.twitter.elephantbird.pig.store.Если ваш формат данных немного отличается, вы можете адаптировать их код к своему пользовательскому загрузчику.

...