hive入门UDF之星座计算(根据hive编程指南)

环境准备


hadoop2.7+centos7+hive1.2.1+VirtualBox+xshll+eclipse+jdk1.8

数据准备:

  1. 启动hadoop集群和hive:
# start-dfs.sh
#source /etc/profile (注:本人集群搭建应该有问题,每次启动hive时都得先运行一下这个命令)
#hive

这里写图片描述

  1. 建立表格:
create table littlebigdata(
name string,
email string,
bday string,
ip string,
gender string,
anum int)
row format delimited fields terminated by ',';
  1. 导入数据:
load data local inpath '/root/data/data6' into table littlebigdata;

“/root/data/data6”修改成自己要上传数据的路径

数据

这里写图片描述
数据到这里就准备好了,接下来就是编写自己的UDF了

编写UDF:

打开Eclipse

package hivejar;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;


@Description(name="zodiac", value="_FUNC_(date)-from the input date string"+"or separate month and day arguments,returns the sign of the Zodiac",
    extended ="Example :\n"+"> SELECT _FUNC_(data_string) from src;\n"+ ">SELECT _FUNC_(mouth,day0) FORM src;")
public class Zodiac extends UDF {
    private SimpleDateFormat df;

    public Zodiac(){
        df=new SimpleDateFormat("MM-dd-yyyy");
    }

    public String evaluate(Date bday){
        return this.evaluate(bday.getMonth(),bday.getDay());
    }

    public String evaluate(String bday){
        Date date =null;
        try{
        date = df.parse(bday);
        }catch (Exception ex){
            return null;
        }
        return this.evaluate(date.getMonth()+1,date.getDay());
    }
    //在这里只写了两个月
    public String evaluate(Integer month,Integer day){
        if (month==1){
            if(day<20){return "Capricorn";
            }else{
                return "Aquarius";
            }
        }
        if(month==2){
            if(day<19){
                return "Aquarius";

            }else{
                return "Pisces";
            }
        }
        return null;
    }

}

然后打包成jar包,然后上传到虚拟机中,
这里写图片描述
其中 zodiac.jar就是打好的jar包
在hive会话中将这个jar文件加载到类路径下:

hive> add jar /root/data/zodiac.jar;
hive> create temporary function zodiac
hive> as 'hivejar.Zodiac';

路径根据自己实际情况修改,

describe function extended zodiac;

这里写图片描述
到这里就已经可以使用了

hive> select name ,bday,zodiac(bday) from littlebigdata;

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值