UDF:一个通过日期计算星座

本文档介绍了如何在Hive中创建自定义函数来根据用户生日计算星座。首先,定义了需求,然后展示了创建数据、创建表和导入数据的步骤。接着,详细讲解了编写Java类实现UDF(用户定义函数),并将这个类打包成jar文件。最后,将jar包添加到Hive的classpath,并创建临时函数,以便在HQL查询中使用这个自定义的`strip`函数来获取用户的星座信息。
摘要由CSDN通过智能技术生成

目录

1.需求

2.创建数据

3.创建表并导入数据

4.创建一个类

5.打包jar并导入hive中

6.将jar包添加到hive的classpath

 7.创建临时函数与开发好的java class关联

8.即可在hql中使用自定义的函数strip


1.需求

自定义函数,通过用户生日,计算每个人对应的星座

2.创建数据

[root@hadoop l0415]# vim littlebigdata.txt 
edward capriolo,edward@media6degrees.com,2-12-1981,209.191.139.200,M,10
bob,bob@test.net,10-10-2004,10.10.10.1,M,50
sara connor,sara@key.net,4-5-1974,64.64.5.1,F,2

3.创建表并导入数据

0: jdbc:hive2://192.168.17.151:10000> create table if not exists littlebigdata
. . . . . . . . . . . . . . . . . . > (name string,
. . . . . . . . . . . . . . . . . . > emaile string,
. . . . . . . . . . . . . . . . . . > bday string,
. . . . . . . . . . . . . . . . . . > ip string,
. . . . . . . . . . . . . . . . . . > gender string,
. . . . . . . . . . . . . . . . . . > anum int)
. . . . . . . . . . . . . . . . . . > row format delimited fields
. . . . . . . . . . . . . . . . . . > terminated by ',';
No rows affected (0.583 seconds)
0: jdbc:hive2://192.168.17.151:10000> load data local inpath '/usr/word/l0415/littlebigdata.txt'
. . . . . . . . . . . . . . . . . . > into table littlebigdata;
No rows affected (0.915 seconds)

函数的输入将是一个日期,函数输出将是表示该用户星座的字符串

4.创建一个类

(在这里我用的IDEA)

package ch1;

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

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//自定义函数
public class UDFZodiacSign extends UDF {
    private SimpleDateFormat df;
    public UDFZodiacSign(){
        df = new SimpleDateFormat("MM-dd-yyyy");
    }
    public String evaluate (Date bday){
        return this.evaluate(bday.getMonth()+1,bday.getDate());
    }

    public String evaluate (String bday){
        Date date = null;
        try {
            date = df.parse(bday);
        } catch (ParseException e) {
            return null;
        }
        return this.evaluate(date.getMonth()+1,date.getDay());


    }

    private 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;
    }
}

5.打包jar并导入hive中

6.将jar包添加到hive的classpath

0: jdbc:hive2://192.168.17.151:10000> add jar /usr/word/l0415/con2.jar;
No rows affected (0.009 seconds)

 7.创建临时函数与开发好的java class关联

0: jdbc:hive2://192.168.17.151:10000> create temporary function zodiac
. . . . . . . . . . . . . . . . . . > as 'ch1.UDFZodiacSign';

8.即可在hql中使用自定义的函数strip

0: jdbc:hive2://192.168.17.151:10000> select name, bday, zodiac(bday)
. . . . . . . . . . . . . . . . . . > from littlebigdata;
+------------------+-------------+-----------+--+
|       name       |    bday     |    c2     |
+------------------+-------------+-----------+--+
| edward capriolo  | 2-12-1981   | Aquarius  |
| bob              | 10-10-2004  | NULL      |
| sara connor      | 4-5-1974    | NULL      |
| lisi             | 5-29-2005   | NULL      |
| wuwu             | 6-19-2000   | NULL      |
+------------------+-------------+-----------+--+
5 rows selected (0.169 seconds)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lambda-小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值