使用loadfunc pig UDF将protobuf格式文件加载到pig脚本中
我对猪的了解很少。我有 protobuf 格式的数据文件。我需要将此文件加载到 Pig 脚本中。我需要编写一个 LoadFunc UDF 来加载它。说函数是Protobufloader()
。
我的 PIG 脚本就是
A = LOAD 'abc_protobuf.dat' USING Protobufloader() as (name, phonenumber, email);
我想知道的就是如何获取文件输入流。一旦我掌握了文件输入流,我就可以将数据从 protobuf 格式解析为 PIG 元组格式。
PS:提前致谢
I have very little knowledge of pig. I have protobuf format data file. I need to load this file into a pig script. I need to write a LoadFunc UDF to load it. say function is Protobufloader()
.
my PIG script would be
A = LOAD 'abc_protobuf.dat' USING Protobufloader() as (name, phonenumber, email);
All i wish to know is How do i get the file input stream. Once i get hold of file input stream, i can parse the data from protobuf format to PIG tuple format.
PS: thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Twitter的开源库elephantbird有很多这样的加载器:
https://github.com/kevinweil/elephant-bird
您可以使用 LzoProtobufB64LinePigLoader 和 LzoProtobufBlockPigLoader。
https://github.com /kevinweil/elephant-bird/tree/master/src/java/com/twitter/elephantbird/pig/load
要使用它,你只需要做:
加载后,它会自动翻译为pig元组具有正确的架构。
但是,他们假设您将数据写入序列化的 protobuffer 中并由 lzo 压缩。
他们也有相应的作者,位于包 com.twitter.elephantbird.pig.store 中。
如果您的数据格式有点不同,您可以调整它们的代码以适应您的自定义加载程序。
Twitter's open source library elephant bird has many such loaders:
https://github.com/kevinweil/elephant-bird
You can use LzoProtobufB64LinePigLoader and LzoProtobufBlockPigLoader.
https://github.com/kevinweil/elephant-bird/tree/master/src/java/com/twitter/elephantbird/pig/load
To use it, you just need to do:
After loading, it will be automatically translated to pig tuples with proper schema.
However, they assume you write your data in serialized protobuffer and compressed by lzo.
They have corresponding writers as well, in package com.twitter.elephantbird.pig.store.
If your data format is a bit different, you can adapt their code to your custom loader.