我对猪的了解很少。我有 protobuf 格式的数据文件。我需要将此文件加载到 Pig 脚本中。我需要编写一个 LoadFunc UDF 来加载它。说函数是Protobufloader()
.
我的 PIG 脚本是
A = LOAD 'abc_protobuf.dat' USING Protobufloader() as (name, phonenumber, email);
我想知道的是如何获取文件输入流。一旦我掌握了文件输入流,我就可以将数据从 protobuf 格式解析为 PIG 元组格式。
PS:提前致谢
Twitter的开源库elephantbird有很多这样的加载器:https://github.com/kevinweil/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 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 中。
如果您的数据格式有点不同,您可以调整它们的代码以适应您的自定义加载器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)