【问题标题】:Loading protobuf format file into pig script using loadfunc pig UDF使用 loadfunc pig UDF 将 protobuf 格式文件加载到 pig 脚本中
【发布时间】:2011-10-25 06:51:36
【问题描述】:

我对猪知之甚少。我有 protobuf 格式的数据文件。我需要将此文件加载到猪脚本中。我需要编写一个 LoadFunc UDF 来加载它。说函数是Protobufloader()。

我的 PIG 脚本是

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

我只想知道如何获取文件输入流。一旦我掌握了文件输入流,我就可以将数据从 protobuf 格式解析为 PIG 元组格式。

PS:提前谢谢

【问题讨论】:

    标签: hadoop apache-pig hadoop-plugins protocol-buffers


    【解决方案1】:

    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 包中。 如果你的数据格式有点不同,你可以调整他们的代码来适应你的自定义加载器。

    【讨论】:

    • 我也有同样的问题。你能提供这个'your.proto.class.name'的实际类名吗?这对我会有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多