• Hive_UDF函数


    UDF是User defined Function的简写,意思是用户自定义方法。

    UDF开发流程

    1 eclipse开发一个java程序,导入hive的jar包

    2 开发代码

    3 将java程序打成jar包,上传到hive所在的机器上,

    注意开发代码的环境和运行环境的jdk版本要一致,不然会报错Unsupported major.minor version 52.0

    4 在hive的命令行中输入以下命令,将程序jar包添加到hive运行时的classpath中

    5 在hive中创建一个函数名,映射到自己开发的java类:

    6 接下来就可以使用自定义的函数了
     
    下面是一个Demo:
     
    有如下原始数据:

    1,zhangsan:18:beijing|male|it,2000

    2,lisi:28:beijing|female|finance,4000

    3,wangwu:38:shanghai|male|project,20000

     

    1先建表:

    create table t_user(id int,user_info string,salary int)
    row format delimited
    fields terminated by ',';

     

    2导数:

    load data local inpath "/home/test.txt" into table t_user;

    3上表不方便做细粒度的分析挖掘,需要将user_info字段拆解成多个字段,用hive自带的函数不方便,

    通过自定义一个函数来实现拆解功能。

     

    public class UserInfoParser extends UDF {
        public String evaluate(String field, int index) {
            String replaceAll = field.replaceAll("\|", ":"); --将|替换为:
            String[] split = replaceAll.split(":");  --字符串切割
            return split[index-1];
        }
    }

     

    4将java程序打成jar包,上传到hive所在的机器上

     

    5在hive的命令行中输入以下命令,将程序jar包添加到hive运行时的classpath中:

    hive> add jar /home/badou/Documents/parseinfo.jar;

     

    6在hive中创建一个函数名,映射到自己开发的java类:

    hive> create temporary function parseinfo as 'hive_udf.UserInfoParse';

     

    7接下来就可以使用自定义的函数uinfo_parse了

    用函数拆解原来的字段,然后将结果保存到一张明细表中:

    create table t_user_info
    as
    select
    id,
    parseinfo(user_info,1) as uname,
    parseinfo(user_info,2) as age,
    parseinfo(user_info,3) as addr,
    parseinfo(user_info,4) as sexual,
    parseinfo(user_info,5) as hangye,
    salary
    from
    t_user;

     

     8 查询解析结果

     

  • 相关阅读:
    [手游新项目历程]-36- error: stray ‘357’ in program
    广告学(一)
    VMware的Unity模式
    poj3709
    poj1849
    bzoj2007
    bzoj3209
    bzoj2466,poj1222
    bzoj1016
    bzoj2186
  • 原文地址:https://www.cnblogs.com/lucas-zhao/p/11908273.html
Copyright © 2020-2023  润新知