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

发布于 2024-11-29 07:06:18 字数 331 浏览 2 评论 0原文

我对猪的了解很少。我有 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

话少心凉 2024-12-06 07:06:18

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

要使用它,你只需要做:

define ProtoLoader com.twitter.elephantbird.pig.load.LzoProtobufB64LineLoader('your.proto.class.name');
a = load '/your/file' using ProtoLoader;
b = foreach a generate
  field1, field2;

加载后,它会自动翻译为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:

define ProtoLoader com.twitter.elephantbird.pig.load.LzoProtobufB64LineLoader('your.proto.class.name');
a = load '/your/file' using ProtoLoader;
b = foreach a generate
  field1, field2;

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文