4

我对猪知之甚少。我有 protobuf 格式的数据文件。我需要将此文件加载到猪脚本中。我需要编写一个 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;

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

但是,他们假设您将数据写入序列化的 protobuffer 并由 lzo 压缩。

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

于 2011-08-12T07:49:19.963 回答