Hive UDF简单函数

article/2025/9/27 2:59:01

概念

在Hive中,用户可以自定义一些函数,用于扩展HiveQL的功能,而这类函数叫做UDF(用户自定义函数)。UDF分为两大类:UDAF(用户自定义聚合函数)和UDTF(用户自定义表生成函数)。
 UDF函数其实就是一个简单的函数,执行过程就是在Hive转换成MapReduce程序后,执行java方法,类似于像MapReduce执行过程中加入一个插件,方便扩展。UDF只能实现一进一出的操作,如果需要实现多进一出,则需要实现UDAF。

Hive函数分类

从输入输出角度分类

  • 标准函数:一行数据中的一列或多列为输入,结果为单一值
  • 聚合函数:多行的零列到多列为输入,结果为单一值
  • 表生成函数:零个或多个输入,结果为多列或多行
    从实现方式分类
  • 内置函数
  • 自定义函数
    • UDF:自定义标准函数
    • UDAF:自定义聚合函数
    • UDTF:自定义表生成函数

Hive UDF开发流程

1.继承UDF类或GenericUDF类
2.重写evaluate()方法并实现函数逻辑
3.编译打包为jar文件
4.复制到正确的HDFS路径
5.使用jar创建临时/永久函数
6.调用函数

自定义UDF

创建maven 项目,模板选用 maven-archetype-quickstart
导入jar包

 <dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.1.0</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.6.0</version></dependency>

详细代码

package mydemo;import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;public class MyFunc extends UDF {public Text evaluate(Text txt){return new Text("Hello,"+txt.toString());
}}

打包

在这里插入图片描述

注册UDF

将打好的jar包移动到虚拟机中,接着上传到hdfs中

hive>add jar hdfs://192.168.56.100:9000/func/myfun-1.0-SNAPSHOT.jar;
hive>create function mytest as "mydemo.MyFunc";

注意事项:
一个用户自定义UDF必须org.apache.hadoop.hive.ql.exec.UDF;
一个UDF必须要包含有evaluate()方法,但是UDF中并没有这个方法。evaluate的参数个数以及类型都是用户自定义的。在使用的时候,Hive会调用UDF的evaluate()方法。


http://chatgpt.dhexx.cn/article/4AFh0GwA.shtml

相关文章

大数据Hive篇--UDF函数

什么是UDF: 它是User defined Function的简写&#xff0c;意思是用户自定义方法 为什么要用UDF&#xff1f; hive自带了一些函数&#xff0c;比如&#xff1a;max、min 等&#xff0c;但是自带的函数数量有限&#xff0c;所以hive提供给用户自定义函数的功能。 udf 函数可以…

《C#入门详解》刘铁猛——Lesson20-21事件

其实事件一般就是在界面程序中应用&#xff0c;所以这里讲的不如WPF这种的实用。

《C#入门详解》刘铁猛——Lesson1-2 IDE、各种应用程序

编程学习路径&#xff1a;语言——类库——框架 参考资料&#xff1a;离线MSDN文档&#xff0c;C#语言定义文档&#xff0c;推荐书籍—C# in a nutshell&#xff1b;其中&#xff0c;C#语言定义文档知识点会串的比较多&#xff0c;不建议详读。 使用MSDN&#xff1a;光标选中…

《C#入门详解》刘铁猛——Lesson8-9 方法的定义、调用与调试

方法命名&#xff1a;使用动词或者动词短语&#xff1b;使用PASCAL规则&#xff0c;即所有单词首字母大写。 静态类型的方法不是实例的方法&#xff0c;是类的方法&#xff0c;因此&#xff0c;实例不能调用静态方法&#xff0c;只能用类调用静态方法&#xff0c;示例程序如下&…

《C#入门详解》刘铁猛——Lesson17字段、属性、索引器、常量

属性代码示例&#xff1a; 以上代码演示了字段由get-set方法对演化成为属性的过程。 prop连敲两下Tab键&#xff0c;是属性声明的快捷键。 强调以下&#xff1a; 很少使用索引器。 声明和使用常量&#xff1a;

《C#入门详解》刘铁猛——Lesson27-28类的重写、多态、抽象类、开闭原则

重写、多态——子类对父类的纵向扩展&#xff0c;就是方法的版本升级。 override——重写&#xff0c;子类对父类成员的版本更新。 virtual——override 下面的例子就是多态——多态就是使用一个父类的变量引用一个子类的实例&#xff0c;当调用方法时&#xff0c;会顺着继承链…

《C#入门详解》刘铁猛——Lesson19委托

自定义委托类型&#xff1a; 模板方法实例&#xff1a; 回调方法示例&#xff1a; 多播委托示例&#xff1a; 同步调用&#xff08;串行&#xff0c;单线程&#xff09;示例&#xff1a; 多播委托也是同步调用&#xff1a; 隐式的异步调用示例&#xff1a; 执行结果发生了资源…

《C#入门详解》刘铁猛——Lesson18传值\输出\引用\数组\具名\可选参数、扩展方法

x是101&#xff0c;y是100 在声明函数的时候带有默认值。 静态函数&#xff0c;第一个参数加this修饰符&#xff0c;就是一个扩展方法。调用的时候可以看见向下的小箭头。

刘铁猛C#语言入门详解——学习笔记014、15、16(2)

using System; using System.Collections.Generic; namespace ConsoleApp2 {class Program{static void Main(string[] args){//c#语言对表达式的定义&#xff1a;a sequence of one or more operands and zero or more operators can be evaluated to a single value object m…

《深入浅出WPF》-刘铁猛学习笔记——XAML

这里有个目录 XAML是什么&#xff1f;导人程序集和引用其中的名称空间XAML的树型结构Attribute (特性、标记、属性)Property (属性)属性赋值字符串赋值使用属性元素( Property Element)进行复杂赋值 XAML 注释后记 XAML是什么&#xff1f; XAML是微软公司创造的一种开发语言&a…

《C#入门详解》刘铁猛——Lesson31泛型、partial类、枚举、结构体

泛型类如下&#xff1a; 泛型接口&#xff0c;太常用了&#xff0c;如下&#xff1a; 实现这个泛型接口的类&#xff0c;也是泛型类&#xff0c;如下&#xff1a; 数据结构&#xff0c;基本上都是泛型的。 方法也可以是泛型的&#xff0c;而且泛型方法更常用&#xff0c;泛型方…

《C#入门详解》刘铁猛——Lesson10-11-12 操作符

纵向往下走&#xff0c;优先级依次降低。 []操作符声明数组&#xff1a; typeof操作符的用法&#xff1a; var声明隐式类型变量&#xff1a; new操作符声明实例&#xff1a; delegate——委托&#xff0c;使用该操作符声明一个匿名方法的示例如下&#xff1a; delegate现在已过…

《C#入门详解》刘铁猛——Lesson22-23LINQ

事件是基于委托的&#xff0c;事件是对委托类型的包装&#xff0c;事件是语法糖&#xff0c;委托类型才是完整格式&#xff0c;保护委托类型不会被外部随便调用。 就像属性是基于字段的&#xff0c;属性是字段的包装&#xff0c;用于防止字段被外部乱用。 三年后的视频。。。 …

刘铁猛《C#语言入门详解》——委托详解

委托详解 事件 using System; using System.Threading;namespace ConsoleAPP1 {class Program{static void Main(string[] args){Customer customer = new Customer(); //s事件拥有者Waiter waiter = new Waiter(); //事件的响应者// += 事件的订阅 customer.Order 事件 …

C#语言入门详解---委托(刘铁猛)

委托:函数指针的升级版,可以类比C语言中的函数指针进行理解 变量的本质就是以变量名所对应的内存地址为起点的一段内存,这段内存中存储的就是变量的数据,这段内存的大小由变量的数据类型决定。 函数代表算法,函数的本质是以函数名所对应的内存地址为起点的一段内存中,这…

刘铁猛《C#语言入门详解》1——详解类型、变量与对象

详解类型、变量与对象——上 C#是强类型语言&#xff0c;可使用dynamic实现弱类型语言的赋值操作&#xff1a; 数据类型 栈溢出&#xff1a;栈很小&#xff0c;分配过多内存会爆掉 内存监视器&#xff1a;winR,命令为&#xff1a;perform 详解类型、变量与对象——下 值类型在…

【C#】刘铁猛-C#语言入门详解听课笔记

叨叨在前&#xff1a; 这个视频共33集&#xff0c;油管和B站都可以看&#xff0c;B站有说有第二版本&#xff0c;但我在油管刘老师主页上没看见。 01 C#语言简介&#xff0c;搭建开发环境【略】 1、C#主要用来编写应用程序的 2、写程序步骤&#xff1a;编辑→编译[把语言转成…

【C#进阶学习】——刘铁猛老师

一、 C#语言入门详解&#xff1a;类、对象、类成员简介 1.1实例化对象 1.2引用变量&#xff08;可以对同一个对象进行操作和访问&#xff09; 1.3类 以属性为侧重点的类 以方法为侧重点的类 以事件为侧重点的类 1.4.静态成员与实例化成员 静态成员&#xff1a;立属于类…

AQS中公平锁和非公平锁的区别

场景&#xff1a;一个线程运行完毕&#xff0c;准备去等待队列中唤醒&#xff08;unpark&#xff09;线程。 公平锁&#xff1a; 当hasQueuedPredecessors 返回false时&#xff0c;则表示不需要去排队&#xff0c;会直接进行cas操作去修改state状态 hasQueuedPredecessors解析 …