我很少了解pig。我有protobuf格式的数据文件,需要将其加载到pig脚本中。我需要编写一个LoadFunc UDF来加载它,函数名为Protobufloader()
。
我的PIG脚本如下:
A = LOAD 'abc_protobuf.dat' USING Protobufloader() as (name, phonenumber, email);
我想知道如何获取文件输入流。一旦我获得了文件输入流,我就可以将数据从protobuf格式解析为PIG元组格式。
PS:提前感谢。
我很少了解pig。我有protobuf格式的数据文件,需要将其加载到pig脚本中。我需要编写一个LoadFunc UDF来加载它,函数名为Protobufloader()
。
我的PIG脚本如下:
A = LOAD 'abc_protobuf.dat' USING Protobufloader() as (name, phonenumber, email);
Twitter的开源库elephant bird有许多这样的加载器:
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中。如果您的数据格式有点不同,可以将它们的代码适应您的自定义加载器。