java udf for pig_pig使用入门3-UDF的使用

1、Working with UDF(user defined function)

pig能够支持两种类型的UDFs:eval和load/store,

其中load/store的自定义函数主要是用来加载和保存特定的数据格式;

eval自定义函数主要用来进行常规的数据转换。

1.1 eval

如果想要实现自定义的eval类型的函数,编写一个类继承自EvalFunc这个抽象类,重写这个类的抽象方法:

abstract public T exec(Tuple input) throws IOException;

该方法传入的类型是Tuple类型(pig类型之一)。

如果调用udf时使用的是:udf(ARG1, ARG2);那么调用input.get(0)将得到ARG1,同理input.get(1)得到的是ARG2,

input.getSize()得到传递的参数的数量,这里就是2.

1.2编写将字符串转换为大写的UDF

导个包pig.0.11..jar加入工作环境

1.3代码示例(注意:此时的包名为myudfs,pig注册UDF的时候,需要使用类的全名)

package myudfs;

import java.io.IOException;

import org.apache.pig.EvalFunc;

import org.apache.pig.data.Tuple;

import org.apache.pig.impl.util.WrappedIOException;

public class UPPER extends EvalFunc{

@Override

public String exec(Tuple input) throws IOException {

// TODO Auto-generated method stub

if(input == null || input.size() == 0){

return null;

}

try {

return ((String)input.get(0)).toUpperCase();

} catch (Exception e) {

// TODO: handle exception

throw WrappedIOException.wrap("Caught exception processing input row",e);

}

}

}

1.4打包命名为UPPER.jar放入pig目录lib文件夹下

1.5准备数据测试文件

student_data文件:

student1,1,1

studetn2,2,2

student3,3,3

student4,4,4

1.6将student_data文件上传hdfs上,hadoop dfs -put student_data /input

1.7执行pig

注册UDF

grunt> register lib/UPPER.jar  使用pwd查看当前工作目录,为pig

1.8加载数据

grunt> A = load 'student_data' using PigStorage(',') as (name:chararray, age:int,gpa:double);

grunt> B = FOREACH A GENERATE myudfs.UPPER(name);   注意类的全名

grunt> dump B;

这时将输出:

(STUDENT1)

(STUDETN2)

(STUDENT3)

(STUDENT4)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值