hive自定义函数(UDF)

首先什么是UDF,UDF的全称为user-defined function,用户定义函数,为什么有它的存在呢?有的时候 你要写的查询无法轻松地使用Hive提供的内置函数来表示,通过写UDF,Hive就可以方便地插入用户写的处理代码并在查询中使用它们,相当于在HQL(Hive SQL)中自定义一些函数,首先UDF必须用java语言编写,Hive本身就是用java写的.

编写UDF需要下面两个步骤:

1.继承org.apache.hadoop.hive.ql.UDF

2.实现evaluate函数,这个函数必须要有返回值,不能设置为void。同时建议使用mapreduce编程模型中的数据类型(Text,IntWritable等),因为hive语句会被转换为mapreduce任务。

看代码吧:

    package hive;

    import org.apache.hadoop.hive.ql.exec.UDF;
    import org.apache.hadoop.hive.ql.metadata.HiveException;
    import org.apache.hadoop.io.Text;

    /**
    * hive自定义函数,取多个字段的最小值;
    */
    public class hiveUDF extends UDF {
    public Text evaluate(Text string){
    Text t ;
    String s = "helloworld"+string;
    t = new Text(s);
    return t;
    }
    }

使用步骤:

1.首先将写好的UDF函数编译后的Java类打包成为一个JAR文件,并在Hive中注册这个文件

add jar /opt/hadoop/xxx.jar;

2.创建方法(退出hive shell后将失效)

create temporary function jasontest as ‘hive.hiveUDF‘;

然后就可以用这个自定义函数了,下面是查看的结果.

查看所有的函数:show functions like ‘*f*‘;

删除某一个函数:drop temporary function jasontest;

删除jar包:delete jar /home/hdfs/structuredstreaming-1.0-SNAPSHOT.jar;

这个方法只是暂时的,在退出hive的时候就不存在了,下次用的时候还需要在添加一遍.

原文地址:https://www.cnblogs.com/wakerwang/p/9542643.html

时间: 2024-07-28 20:27:16

hive自定义函数(UDF)的相关文章

hive自定义函数UDF UDTF UDAF

Hive 自定义函数 UDF UDTF UDAF 1.UDF:用户定义(普通)函数,只对单行数值产生作用: UDF只能实现一进一出的操作. 定义udf 计算两个数最小值 public class Min extends UDF { public Double evaluate(Double a, Double b) { if (a == null) a = 0.0; if (b == null) b = 0.0; if (a >= b) { return b; } else { return a

[Hive]Hive自定义函数UDF

当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数 用户自定义函数(user defined function),针对单条记录. 编写一个UDF,需要继承UDF类,并实现evaluate()函数.在查询执行过程中,查询中对应的每个应用到这个函数的地方都会对这个类进行实例化.对于每行输入都会调用到evaluate()函数.而evaluate()函数处理的值会返回给Hive.同时用户是可以重载evaluate方法的.Hive会像Java的方法重载一样,自动选择匹配的

Hive自定义函数(UDF、UDAF)

当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数. UDF 用户自定义函数(user defined function)–针对单条记录. 创建函数流程 1.自定义一个Java类 2.继承UDF类 3.重写evaluate方法 4.打成jar包 6.在hive执行add jar方法 7.在hive执行创建模板函数 8.hql中使用 Demo01: 自定义一个Java类 package UDFDemo; import org.apache.hadoop.hive.

Hive自定义函数UDF示例

简单自定义函数只需继承UDF类,然后重构evaluate函数即可 LowerCase.java: package com.example.hiveudf; import org.apache.hadoop.hive.ql.exec.UDF; public final class LowerCase extends UDF { public String evaluate(final String s) { if (s == null) { return null; } return new St

Hive自定义函数UDF和UDTF

UDF(user defined functions) 用于处理单行数据,并生成单个数据行. PS: l 一个普通UDF必须继承自"org.apache.hadoop.hive.ql.exec.UDF".l 一个普通UDF必须至少实现一个evaluate()方法,evaluate函数支持重载. 主要步骤如下: 步骤1 把以上程序打包成AddDoublesUDF.jar,并上传到HDFS指定目录下(如" /user/hive_examples_jars/" )且创建函

Hive 自定义函数 UDF UDAF UDTF

UDF:用户定义(普通)函数,只对单行数值产生作用: 继承UDF类,添加方法 evaluate() /** * @function 自定义UDF统计最小值 * @author John * */ public class Min extends UDF { public Double evaluate(Double a, Double b) { if (a == null) a = 0.0; if (b == null) b = 0.0; if (a >= b) { return b; } el

Hive自定义函数的学习笔记(1)

前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到, 因此hive提供了自定义函数的接口, 方便用户扩展. 自己好像很久没接触hadoop了, 也很久没博客了, 今天趁这个短期的项目, 对hive中涉及的自定义函数做个笔记. 准备: 编写hive自定义函数前, 需要了解下当前线上hive的版本. hive --vesion 比如作者使用到的hive

T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响!

原文:T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst.语言版本影响! CSDN 的 Blog 太滥了!无时不刻地在坏! 开始抢救性搬家 ... ... 到这里重建家园 /* T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst.语言版本影响 都是从老文章里收集或提炼出来的! 提示: (@@Datefirst + datepart(weekday,@Date)) % 7 判

HIVE 编写自定义函数UDF

一 新建JAVA项目 并添加 hive-exec-2.1.0.jar 和hadoop-common-2.7.3.jar hive-exec-2.1.0.jar 在HIVE安装目录的lib目录下 hadoop-common-2.7.3.jar在hadoop的安装目录下的\share\hadoop\common 二 编一个一个类并继承UDF 并重写evaluate方法 下面以rownum为例 package com.udf; import org.apache.hadoop.hive.ql.exec