• 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 查询解析结果

     

  • 相关阅读:
    flask(十)使用alembic,进行数据库结构管理,升级,加表,加项
    Python sqlalchemy使用
    flask+script命令行交互工具
    flask+APScheduler 任务调度,计划任务,定时任务
    DBA日常工作职责
    Oracle 的 VKTM 进程
    linux
    UF2.0、O4、UFT、TA众明星背后的秘密
    ORA-01502: 索引或这类索引的分区处于不可用状态
    关于Optimizer_index_cost_adj参数的设置
  • 原文地址:https://www.cnblogs.com/lucas-zhao/p/11908273.html
Copyright © 2020-2023  润新知