Hive自定义函数

Hive自定义函数

一.获取标致字符左边或者右边的内容的LeftOrRightUDF类

1.源代码
package chu;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class LeftOrRightUDF extends UDF{
    public Text evaluate(Text text, Text sign, Text choice){
        if((text==null||sign==null)) return null;
        String content=text.toString();
        if(!content.contains(sign.toString())) return text;
        if(choice.toString().toUpperCase().equals("R")){
            return new Text(content.substring(content.indexOf(sign.toString())+1));
        }else {
            return new Text(content.substring(0,content.indexOf(sign.toString())));
        }
    }
}
2.如何使用
参数一 类型 Text:传入的字符串;
参数二 类型 Text:选择一个标致字符;
参数三 类型 Text:r或R代表取标致字符右边内容,其它默认取左边;
3.示例
create temporary function lor as 'chu.LeftOrRightUDF';
select lor("anhui-bigdata-nb","bigdata","l");
输出:anhui-

二.去除非法字符串的ReplaceIllegalSignUDF类

1.源代码
package chu;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

public class ReplaceIllegalSignUDF extends UDF{
    public Text evaluate(Text text, Text ...signs){
        if (text==null) return null;
        String result=text.toString();
        for(Text sign:signs){
            result=result.replace(sign.toString(),"");
        }
        return new Text(result);
    }
}
2.如何使用
参数一 类型 Text:传入的字符串;
可选参数 类型 Text:待除去的字符或字符串;
3.示例
create temporary function ris as 'chu.ReplaceIllegalSignUDF';
select ris("anhui-bigdata-nb","bigdata","-");
输出:anhuinb

三.生成指定长度,最大值的随机列表RandomListUDF类

1.源代码
package chu;
import java.util.Random;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;

public class RandomListUDF extends UDF{
    public Text evaluate(IntWritable count, IntWritable max) {
        Random random=new Random();
        StringBuilder result= new StringBuilder();
        for (int i = 0; i<count.get(); i++) {
            result.append(String.valueOf(random.nextInt(max.get()))).append(" ");
        }
        return new Text(result.toString().trim());
    }
}

2.如何使用
参数一 类型 IntWritable:生成列表的长度;
参数二 类型 IntWritable:生成列表中最大的数-1;
3.示例
create temporary function rl as 'chu.RandomListUDF';
select rl(10,10);
输出:十个最大数不超过9的列表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值