使用loadfunc pig UDF将protobuf格式文件加载到pig脚本中

4

我很少了解pig。我有protobuf格式的数据文件,需要将其加载到pig脚本中。我需要编写一个LoadFunc UDF来加载它,函数名为Protobufloader()

我的PIG脚本如下:

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

我想知道如何获取文件输入流。一旦我获得了文件输入流,我就可以将数据从protobuf格式解析为PIG元组格式。
PS:提前感谢。
1个回答

6

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中。如果您的数据格式有点不同,可以将它们的代码适应您的自定义加载器。


2
我也遇到了同样的问题。你能否提供 'your.proto.class.name' 的实际类名?这对我会很有帮助。 - venkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接