• 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(存储函数)
     
  • 相关阅读:
    iptbales未完全删除或禁用的问题
    一键部署安装
    python表单流式上传gzip格式文件代码
    was进行jvm配置和GC收集
    Nginx心跳检测
    Python简单本地加解密
    vmware克隆虚拟机并设置网络(vcenter6或5.5)
    python操作mongodb数据库
    vue props传值后watch事件未触发的问题
    docker实战之通过nginx镜像来部署静态页
  • 原文地址:https://www.cnblogs.com/lishouguang/p/4559619.html
Copyright © 2020-2023  润新知