11、Hive数据仓库——UDF、UDTF

文章目录

  • Hive数据仓库——UDF、UDTF
    • UDF:一进一出
      • 案例一
      • 创建Maven项目,并加入依赖
      • 编写代码,继承org.apache.hadoop.hive.ql.exec.UDF,实现evaluate方法,在evaluate方法中实现自己的逻辑
      • 打成jar包并上传至Linux虚拟机
      • 在hive shell中,使用 ```add jar 路径```将jar包作为资源添加到hive环境中
      • 使用jar包资源注册一个临时函数,fxxx1是你的函数名,'MyUDF'是主类名
      • 使用函数名处理数据
      • 案例二
      • 编写代码,继承org.apache.hadoop.hive.ql.exec.UDF,实现evaluate方法,在evaluate方法中实现自己的逻辑
      • 打成jar包并上传至Linux虚拟机
      • 在hive shell中,使用 ```add jar 路径```将jar包作为资源添加到hive环境中
      • 使用jar包资源注册一个临时函数,fxxx1是你的函数名,'MyUDF'是主类名
      • 使用函数名处理数据
    • UDTF:一进多出
      • 方法一:使用 explode+split
      • 方法二:自定义UDTF
        • 案例一
        • 案例 二

Hive数据仓库——UDF、UDTF

UDF:一进一出

案例一

创建Maven项目,并加入依赖

<dependency>
	<groupId>org.apache.hivegroupId>
	<artifactId>hive-execartifactId>
	<version>1.2.1version>
dependency>

编写代码,继承org.apache.hadoop.hive.ql.exec.UDF,实现evaluate方法,在evaluate方法中实现自己的逻辑

package com.liangzai.UDF;

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

public class MyUDF extends UDF {
   
    // 自定义UDF 需要继承UDF类,实现evaluate方法
    public String evaluate(String gender) {
   
        // 男 女
        String resStr = "";
        resStr = gender.replace("男","boy");
        resStr = resStr.replace("女","girl");
        return resStr;
    }
}

打成jar包并上传至Linux虚拟机

在hive shell中,使用 add jar 路径将jar包作为资源添加到hive环境中

add jar /usr/local/soft/jars/Hive-1.0.jar;

使用jar包资源注册一个临时函数,fxxx1是你的函数名,'MyUDF’是主类名

create temporary function my_udf as 'com.liangzai.UDF.MyUDF';

使用函数名处理数据

select my_udf(gender) as new_gender from students limit 10;
select *,my_udf(gender) as new_gender from students limit 10;
11、Hive数据仓库——UDF、UDTF_第1张图片

案例二

编写代码,继承org.apache.hadoop.hive.ql.exec.UDF,实现evaluate方法,在evaluate方法中实现自己的逻辑

package com.liangzai.UDF;

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

public class MyUDF1 extends UDF {
   
    public String evaluate(String clazz) {
   
        // 自定义UDF 需要继承UDF类,实现evaluate方法
        // 班级
        String resStr = "";
        resStr = clazz.replace("一","1");
        resStr = resStr.replace("二","2");
        resStr = resStr.replace("三"

你可能感兴趣的:(Hive,hadoop,hive,数据仓库,hadoop)