注册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(存储函数)
 

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

  1. 15第十五章UDF用户自定义函数(转载)

    15第十五章UDF用户自定义函数 待补上 原文链接 本文由豆约翰博客备份专家远程一键发布

  2. Hive UDF 用户自定义函数 编程及使用

    首先创建工程编写UDF 代码,示例如下: 1. 新建Maven项目 udf 本机Hadoop版本为2.7.7, Hive版本为1.2.2,所以选择对应版本的jar ,其它版本也不影响编译. 2. po ...

  3. SQL Server UDF用户自定义函数

    UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且尅作为一个单元爱进行调用.UDF和存储过程的主要区别在于返回结果的方式. 使用UDF时可传入参数, ...

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

    当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function). 测试各种内置函数的快捷方法: 创建一个 dual 表 ...

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

    原文地址:http://blog.csdn.net/zythy/article/details/18326693 我们以气温统计和词频统计为例,讲解以下三种用户自定义函数. 用户自定义函数 什么时候需 ...

  6. Hive中的用户自定义函数UDF

    Hive中的自定义函数允许用户扩展HiveQL,是一个非常强大的功能.Hive中具有多种类型的用户自定义函数.show functions命令可以列举出当前Hive会话中的所加载进来的函数,包括内置的 ...

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

    一.UDF的定义 和存储过程很相似,用户自定义函数也是一组有序的T-SQL语句,UDF被预先优化和编译并且可以作为一个单元来进行调用. UDF和存储过程的主要区别在于返回结果的方式: 使用UDF时可传 ...

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

    UDAF = USER DEFINED AGGREGATION FUNCTION Spark sql提供了丰富的内置函数供猿友们使用,辣为何还要用户自定义函数呢?实际的业务场景可能很复杂,内置函数ho ...

  9. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

随机推荐

  1. Spring Security构建Rest服务-1401-权限表达式

    Spring Security 的权限表达式 用法,在自定义的BrowserSecurityConfig extends WebSecurityConfigurerAdapter 配置文件里,每一个a ...

  2. Spring Security构建Rest服务-0801-短信验证码发送

    实现短信验证码登录 开发短信验证码接口 校验短信验证码并登录 短信验证码和图片验证码开发思路类似: 1,我们访问一个controller 2,在controller里调用短信验证码生成接口生成验证码 ...

  3. 目录打散-hash算法

    前几篇说了文件上传,都是上传到了WebRoot下的up目录,这样是不行的,文件多了性能就不行了.文件一般都是分目录存放的,这里讲建目录的一种算法.先看结果,经过本算法建的目录,结构是这样的,还以up目 ...

  4. Jfinal本地eclipse+tomcat运行项目时候遇到错误Exception starting filter

    今天想在本地eclipse上启动tomcat让项目在本地运行,但是老是报错类找不到异常. 也可能报其它错误,大概都是classNotFoundException. 九月 19, 2018 5:42:2 ...

  5. android学习-Adapter适配器进阶

    参考资源 Android 快速开发系列 打造万能的ListView GridView 适配器 实现代码复用,争取打机**的时间. android4.4源码 target=android-19 一般自定 ...

  6. 自然语言处理--N-gram

    考虑一个语音识别系统,假设用户说了这么一句话:“I have a gun”,因为发音的相似,该语音识别系统发现如下几句话都是可能的候选:1.I have a gun. 2.I have a gull. ...

  7. MySQL中date类型的空值0000-00-00和00:00:00

    1.如果mysql中使用了date类型,并且默认值为'0000-00-00', 那么数据库中的'0000-00-00 00:00:00', '0000-00-00', '00:00:00'这三个值是相 ...

  8. Java 集合框架(三)—— LinkedList

    三.链表 —— LinkedList ArrayList 虽然好用,但是数组和数组列表都有一个重大的缺陷:从数组的中间位置删除一个元素要付出很大的代价,其原因是数组中处于被删除元素之后的所有元素都要向 ...

  9. Nginx(一)安装及启停

    目录 1 nginx安装 2 nginx启停 我发现很多博客排版杂乱,表达不清,读者看了往往云里雾里.我此前的博客也是如此,我自己很不满意.今起,每一篇博客都会用心写,此前的博客我也会尽力修改.至少要 ...

  10. JVM内存限制和调整

    今天用java -jar执行一个jar文件提示内存不够,需要设置虚拟机的堆大小.以下是参考资料: 堆(Heap)和非堆(Non-heap)内存  按照官方的说法:“Java 虚拟机具有一个堆,堆是运行 ...