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

Red*_*ddy 4 hadoop protocol-buffers apache-pig hadoop-plugins

我对猪的知识很少.我有protobuf格式的数据文件.我需要将此文件加载到pig脚本中.我需要编写一个LoadFunc UDF来加载它.说功能是Protobufloader().

我的PIG脚本会是

A = LOAD 'abc_protobuf.dat' USING Protobufloader() as (name, phonenumber, email);
Run Code Online (Sandbox Code Playgroud)

我想知道的是如何获取文件输入流.一旦我掌握了文件输入流,我就可以将数据从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;
Run Code Online (Sandbox Code Playgroud)

加载后,它将自动转换为具有正确模式的猪元组.

但是,他们假设您在序列化的protobuffer中编写数据并由lzo压缩.

他们在com.twitter.elephantbird.pig.store包中也有相应的编写器.如果您的数据格式有所不同,则可以将其代码调整为自定义加载程序.

  • 我也有同样的问题.你可以为这个'your.proto.class.name'提供实际的类名.这对我有帮助. (2认同)