注册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. editplus配置csharp

    只要是写代码的,我们肯定常有用到EditPlus..Net开发也是如此.有时我们需要调试一小段C#(或VB.Net)代码,这时去大动干戈在臃肿的VS.Net中新建“控制台应用程序”项目,写满“Cons ...

  2. Spring Security构建Rest服务-1205-Spring Security OAuth开发APP认证框架之Token处理

    token处理之二使用JWT替换默认的token JWT(Json Web Token) 特点: 1,自包含:jwt token包含有意义的信息 spring security oauth默认生成的t ...

  3. 【java排序】冒泡排序、快速排序

    冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地 进行直到没有再需要交换,也就是说该数列已经排序完成.这 ...

  4. php 数字 的简单加解密

    转载 <?php /** * 加密解密类 * 该算法仅支持加密数字.比较适用于数据库中id字段的加密解密,以及根据数字显示url的加密. * @author 深秋的竹子 * @email 812 ...

  5. wordpress时间函数the_time() 详解

    一直以来,我对时间显示这一块都没有给予些微的关注,但昨天无意间在网络上看到了上面有一篇文章所说的就是the_time()时间函数,感觉很有必要整理一下,便将其中的内容整理了下来.可能很多朋友对于时间的 ...

  6. mongodb-导出数据到csv文件或json文件

    在mongodb的bin目录下, 有一个mongoexport, 可用于数据的导出 [wenbronk@localhost bin]$ ./mongoexport --help Usage: mong ...

  7. docker 创建jdk镜像

    基于上一个创建的基础镜像, wenbronk/centos Dockerfile ############################################ # version : we ...

  8. cpu负载的探讨

    原链接:http://blog.chinaunix.net/uid-12693781-id-368837.html 摘要:确定cpu的负载的定义,帮助管理员设置cpu负载阀值,推测可能的导致cpu负载 ...

  9. C#语法之泛型

    前面两篇C#语法主要是回顾委托相关的.这篇主要回顾了泛型. 一.为什么要有泛型? 我们在写一些方法时可能会方法名相同,参数类型不同的方法,这种叫做重载.如果只是因为参数类型不同里面做的业务逻辑都是相同 ...

  10. 不停机不停服务,MYSQL可以这样修改亿级数据表结构

    摘  要:本文阐述了MySQL DDL 的问题现状.pt-online-schema-change的工作原理,并实际利用pt-online-schema-change工具在线修改生产环境下1.6亿级数 ...