码迷,mamicode.com
首页 > 其他好文 > 详细

pig使用入门3-UDF的使用

时间:2014-06-18 23:43:45      阅读:495      评论:0      收藏:0      [点我收藏+]

标签:class   blog   java   ext   get   使用   

1、Working with UDF(user defined function)

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

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

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

1.1 eval

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

  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<String>{

	@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)

pig使用入门3-UDF的使用,布布扣,bubuko.com

pig使用入门3-UDF的使用

标签:class   blog   java   ext   get   使用   

原文地址:http://www.cnblogs.com/jsunday/p/3789673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!