Pig UDF 用户自定义函数

注册UDF

do.pig的内容如下:

register /xx/yy.jar
data = load ‘data‘;
result = foreach data generate aa.bb.Upper($0);
dump result;

  

register的路径可以是本地路径,也可以是hdfs路径

register hdfs://pig/xx/yy.jar

  

如果是pig -Dudf.import.list=aa.bb,在引用UDF时可以不用包路径:

register /xx/yy.jar
data = load ‘data‘;
result = foreach data generate Upper($0);
dump result;

  

如果是pig -Dpig.additional.jars=/xx/yy.jar,可以不用register:

data = load ‘data‘;
result = foreach data generate aa.bb.Upper($0);
dump result;

  

可以使用define为UDF起别名:

register /xx/yy.jar
define UPPER aa.bb. Upper();
data = load ‘data‘;
result = foreach data generate UPPER($0);
dump result;

  

如果构造UDF需要参数,可以在define里传入,也可以define多个重载的构造函数

register /xx/yy.jar
define UPPER1 aa.bb. Upper();
define UPPER2 aa.bb. Upper(‘abc‘);
data = load ‘data‘;
result = foreach data generate UPPER1($0), UPPER2($1);
dump result;

  

调用静态java函数

可调用的函数必须符合条件:

1)静态函数

2)参数是基本数据类型、stirng、array

3)返回值是基本数据类型、string

多个参数用空格分隔

InvokeForInt、InvokeForLong、InvokeForFloat、InvokeForDouble、InvokeForString

define hex InvokeForString(‘java.lang.Integer.toHexString‘, ‘int‘);
data = load ‘data‘;
result = foreach data generate hex((int)$0);

  

define stdev InvokeForDouble(‘com.acme.stats.stdev‘, ‘double[]‘);
a = load ‘data‘ as (id:int, dp:double);
b = group a by id;
c = foreach b generate stdev(a.dp);

  

自定义UDF

Eval Function (运算函数)

package com.test.pig.udf;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class CustomReplaceFunc extends EvalFunc<String> {
	@Override
	public String exec(Tuple tuple) throws IOException {
		if(tuple == null || tuple.size() == 0 || tuple.isNull(0) ) {
			return null;
		}

		String original = (String)tuple.get(0);
		String oldChar = (String)tuple.get(1);
		String newChar = (String)tuple.get(2);

		return original.replaceAll(oldChar, newChar);
	}
}

  

register /home/pig/myfunc.jar
define MyReplace com.test.pig.udf.CustomReplaceFunc();
users = load ‘/users.data‘ as (name:chararray, age, address);
result = foreach users generate MyReplace(name, ‘l‘, ‘L‘), age, address;
dump result;

  

Aggregate Function (聚合函数)

Filter Function(过滤函数)

Load Function(加载函数)

Store Function(存储函数)

时间: 2024-10-13 09:28:40

Pig UDF 用户自定义函数的相关文章

SQL Server UDF用户自定义函数

UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且尅作为一个单元爱进行调用.UDF和存储过程的主要区别在于返回结果的方式. 使用UDF时可传入参数,但不可传出参数.输出参数的概念被更为健壮的返回值取代了.和系统函数一样,可以返回标量值,这个值的好处是它并不像在存储过程中那样只限于整形数据类型,而是可以返回大多数SQL Server数据类型. UDF有以下两种类型: 返回标量值的UDF. 返回表的UDF. 创建语法: CREATE FUNCTIO

Hive的UDF(用户自定义函数)开发

当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function). 测试各种内置函数的快捷方法: 创建一个 dual 表 create table dual(id string); load 一个文件(只有一行内容:内容为一个空格)到 dual 表 新建 JAVA maven 项目 添加依赖 <dependencies> <dependency> <groupId>org.apache.hiv

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 '

详解Spark sql用户自定义函数:UDF与UDAF

UDAF = USER DEFINED AGGREGATION FUNCTION Spark sql提供了丰富的内置函数供猿友们使用,辣为何还要用户自定义函数呢?实际的业务场景可能很复杂,内置函数hold不住,所以Spark sql提供了可扩展的内置函数接口:哥们,你的业务太变态了,我满足不了你,自己按照我的规范去定义一个sql函数,该怎么折腾就怎么折腾! 例如,MySQL数据库中有一张task表,共两个字段taskid (任务ID)与taskParam(JSON格式的任务请求参数).简单起见,

SQL Server用户自定义函数(UDF)

一.UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且可以作为一个单元来进行调用.UDF和存储过程的主要区别在于返回结果的方式. 使用UDF时可传入参数,但不可传出参数.输出参数的概念被更为健壮的返回值取代了. 和系统函数一样,可以返回标量值,这个值的好处是它并不像在存储过程中那样只限于整形数据类型,而是可以返回大多数SQL Server数据类型. UDF有以下两种类型: 返回标量值的UDF. 返回表的UDF. 创建语法: CREATE FUN

Apache DataFu: LinkedIn开源的Pig UDF库

介绍 Apache DataFu分两部分,本文介绍的是其Pig UDF的部分.代码在Github上开源(除了代码外.也有一些slides介绍链接). DataFu里面是一些Pig的UDF.主要包含这些方面的函数: bags.geo.hash.linkanalysis.random.sampling.sessions.sets.stats.urls 每方面都相应一个package. 我把全部的函数源代码都浏览了一遍.事实上本身对这些UDF的使用,官方的文档上都有介绍,并且源代码的凝视里也些的非常清

SQL之用户自定义函数

关于SQL Server用户自定义的函数,有标量函数.表值函数(内联表值函数.多语句表值函数)两种. 题外话,可能有部分朋友不知道SQL Serve用户自定义的函数应该是写在哪里,这里简单提示一下,在Microsoft SQL Server Managerment Studio里面,展开具体需要创建SQL Server用户自定义函数的数据库(即每个用户自定义函数只针对具体的一个数据库有用),然后找到可编程性选项,再展开找到函数选项,在具体的函数选项里面可参照下图的方式鼠标右键选择来添加. 标量函

SQL Server用户自定义函数

用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统 函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE 命令来执行.在 SQL Server 中根据函数返回值形式的不同将用户自 定义函数分为三种类型:(1) 标量函数标量函数返回一个确定类型的标量值,其返回值类型为除 TEXT . NTEXT .IMAGE . CURSOR . TIMESTAMP 和 TABLE 类型外的其它数据类型.函数体语句定义在 BEGIN-END 语句内.在 RETURNS