开发Hive自定义函数

推荐文章《hive2.1.1 + hadoop2.8.0 + windows7(不用cygwin)搭建Hive》


1、开发自定义函数

自定义类继承hive提供的UDF类

UDF :(user define function)用户自定义函数

定义evaluate方法,可以重载多个,hive会自动根据参数类型决定调用那个方法

package com.cn.test.hive;

import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;

import java.util.HashMap;
import java.util.Map;


public class MyTestUDF extends UDF {
    private static final Map<String, String> areaMap = new HashMap<String, String>();

    static {
        areaMap.put("135", "福建");
        areaMap.put("136", "浙江");
        areaMap.put("137", "广东");
        areaMap.put("138", "北江");
        areaMap.put("139", "上海");
    }

    /**
     * 根据手机号获取归属地
     */
    public String evaluate(String phoneNum) {
        if(StringUtils.isBlank(phoneNum) || phoneNum.length() < 3){
            return "";
        }
        String area = areaMap.get(phoneNum.substring(0, 3));

        return area == null? "未知":area;
    }

    /**
     * 统计上行和下行流量
     */
    public int evaluate(int upFlow, int downFlow) {
        return upFlow + downFlow;
    }
}


2、打包并上传

将自定义函数的jar包拷贝到HIVE_HOME\lib文件夹下(windows下推荐使用此方法,需重启hive客户端)

或使用hive客户端执行 add jar '/home/myUDF.jar'(linux下推荐使用此方法)


3、创建hive函数

create temporary function areasum as 'com.cn.test.hive.MyTestUDF';


4、建表

create table t_user_udf(phone string, up_flow int, down_flow int)

row format delimited

fields terminated by ',';


5、上传数据

在本地文件夹创建data.txt,内容:

13350467821,100,2330
13450467821,120,2002
13550467821,100,210
13650467821,130,200123
13750467821,122,200
13850467821,100,210213

在hive客户端执行:

load data local inpath 'e:/data.txt' into table t_user_udf;


6、使用自定义函数

select phone, areasum(phone), areasum(up_flow, down_flow) from t_user_udf;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值