pig使用入门3-UDF的使用

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

时间: 2024-10-12 17:18:56

pig使用入门3-UDF的使用的相关文章

玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五)

GMV(一定时间内的成交总额)是一个衡量电商网站营业收入的一项重要指标,例如淘宝,京东都有这样的衡量标准,感兴趣的朋友可以自己科普下这方面的概念知识. 当然散仙今天,并不是来解释概念的,而是记录下最近工作的一些东西,原来我们平台的GMV只有一个总的成交金额,并没有细分到各个系统的GMV的比重,比如搜索端,推荐端,移动端等等. 通过细粒度的分析各个系统所占的比重,对于指导各个系统完善和发展有一定的重要意义,这里不就深说了,下面先来看下散仙分析的搜索gmv的数据布局方式. (1)Hadoop集群上,

pig使用入门2

1.练习 首先编写两个数据文件A: 0,1,2 1,3,4 数据文件B: 0,5,2 1,7,8 上传到HDFS对应目录/input目录下 2.运行pig ,加载A和B 加载数据A:使用指定的分隔符,    grunt> a = load '/input/A' using PigStorage(',') as (a1:int, a2:int, a3:int); 加载数据B: grunt> b = load '/input/B' using PigStorage(',') as (b1:int,

pig使用入门1

1.在pig下载的安装包,解压完成了之后,有一个tutorial目录,我们使用里面的数据来开始pig学习.如果tutorial目录下没有存在pigtutorial.tar.gz文件的话,那么需要使用ant来编译出这个文件 如果没有ant,见分类linux下的ant安装 2.进入tutorial目录,执行命令ant 得到pigtutorial.tar.gz 3.使用tar -zxvf pigtutorial.tar.gz 解压 4.上传excite-small.log进入hdfs中 $>hadoo

Pig用户自定义函数(UDF)

我们以气温统计和词频统计为例,讲解以下三种用户自定义函数. 用户自定义函数 什么时候需要用户自定义函数呢?和其它语言一样,当你希望简化程序结构或者需要重用程序代码时,函数就是你不二选择. Pig的用户自定义函数可以用Java编写,但是也可以用Python或Javascript编写.我们接下来以Java为例. 自定义过滤函数 我们仍然以先前的代码为例: records = load 'hdfs://localhost:9000/input/temperature1.txt'as (year: ch

Pig用户自定义函数(UDF)转

原文地址:http://blog.csdn.net/zythy/article/details/18326693 我们以气温统计和词频统计为例,讲解以下三种用户自定义函数. 用户自定义函数 什么时候需要用户自定义函数呢?和其它语言一样,当你希望简化程序结构或者需要重用程序代码时,函数就是你不二选择. Pig的用户自定义函数可以用Java编写,但是也可以用Python或Javascript编写.我们接下来以Java为例. 自定义过滤函数 我们仍然以先前的代码为例: records = load '

Apache Pig入门学习文档(一)

1,Pig的安装    (一)软件要求    (二)下载Pig      (三)编译Pig 2,运行Pig    (一)Pig的所有执行模式    (二)pig的交互式模式    (三)使用pig脚本执行模式 3,Pig  Latin语句的声明     (一)加载数据     (二)使用和处理数据    (三)存储中间数据 (四)存储最终数据 (五)调试Pig Latin语言 4,Pig的属性值管理 5,Pig一些注意事项 1,Pig的安装 (一)软件安装 必须配置: (1)hadoop 下载地

玩转大数据系列之Apache Pig高级技能之函数编程(六)

原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Apache Pig如何自定义UDF函数? Apache Pig5行代码怎么实现Hadoop的WordCount? Apache Pig入门学习文档(一) Apache Pig学习笔记(二) Apache Pig学习笔记之内置函数(三) 玩转大数据系列之Apache Pig如何与Apache Lucen

如何使用Pig集成分词器来统计新闻词频?

散仙在上篇文章中,介绍过如何使用Pig来进行词频统计,整个流程呢,也是非常简单,只有短短5行代码搞定,这是由于Pig的内置函数TOKENIZE这个UDF封装了单词分割的核心流程,当然,我们的需求是各种各样的,Pig的内置函数,仅仅解决了80%我们常用的功能,如果稍微我有一些特殊的需求,就会发现内置函数解决不了,不过也无需担忧,Pig开放了各个UDF的接口和抽象类,从加载,转换,过滤,存储等等,都有对应的实现接口,只要我们实现或继承它,就非常方便扩展. 本篇呢,散仙会使用Ansj分词器+Pig来统

Pig实战

1. pig简介 2. 安装pig 3. 实战pig 4. 深入pig 5. 参考资料及代码下载 <1>. Pig简介  pig是hadoop项目的一个拓展项目, 用以简化hadoop编程(简化的程度超乎想象啊),并且提供一个更高层次抽象的数据处理能力,同时能够保持hadoop的简单和可靠性. <2>. 安装pig  2.1 下载pig:[点击下载]pig安装包 2.2 解压下载完成的pig安装包: [email protected]:~/hadoop/src/pig$ tar z