在 PIg 脚本中对 Avro 文件使用 UDF

Posted

技术标签:

【中文标题】在 PIg 脚本中对 Avro 文件使用 UDF【英文标题】:Using UDF on Avro file in PIg script 【发布时间】:2016-04-19 14:23:40 【问题描述】:

我正在使用 Pig 将 HDFS 上的 avro 文件导入到 HBase,但我必须将用户定义的函数 (UDF) 应用于行 ID。我正在使用Apache DataFU中的SHA函数

register datafu-pig-incubating-1.3.0.jar
define SHA datafu.pig.hash.SHA();

set hbase.zookeeper.quorum 'localhost';
set mapreduce.fileoutputcommitter.marksuccessfuljobs 'false';

avro = LOAD '/user/myuser/avro/' USING AvroStorage();
partitioned = FOREACH avro GENERATE SHA(ROW_ID) as key,VALUE_1,VALUE_2;

STORE partitioned INTO 'hbase://MYTABLE' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('cf:value_1 cf:value_2');

我已经尝试了 DataFU 网站上的示例脚本,它们成功完成,如果我从它完成的脚本中删除 SHA() 调用,那么我错过了什么?

【问题讨论】:

【参考方案1】:

没关系,这是我自己的错。 SHA() 调用需要一个字符串参数,ROW_ID 定义为 long,我为 ROW_ID 添加了一个强制转换到 chararray,它现在可以工作了

如果我将脚本作为 oozie 工作流的一部分运行,则日志中没有错误,但如果我将其逐行输入到 grunt shell 中,则会在“partitioned =”行之后收到错误消息

对于遇到 UDF 问题的任何人,我建议先在 shell 中逐行输入脚本

【讨论】:

以上是关于在 PIg 脚本中对 Avro 文件使用 UDF的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pig 脚本将文本文件转换为 avro

如何在 Pig 中使用 Avro 数据

无法通过在 Azure HDInsight 中运行的 piggybank.jar 使用 PIG 读取 Avro 文件

在 Talend 中实现 UDF 和 Pig 脚本逻辑

我可以在 Pig 脚本中将参数传递给 UDF 吗?

Pig 脚本无法注册 UDF