在 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的主要内容,如果未能解决你的问题,请参考以下文章