大数据Hive篇--UDF函数

article/2025/9/27 3:00:52

什么是UDF:

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

为什么要用UDF?

hive自带了一些函数,比如:max、min 等,但是自带的函数数量有限,所以hive提供给用户自定义函数的功能。
udf 函数可以直接应用于select 语句,对查询结构做格式化处理之后,然后再输出内容。

hive 编写udf函数的时候需要注意的地方:

1.自定义udf函数需要继承org.apache.hadoop.hive.ql.UDF
2.需要实现evaluate 函数,evaluate 函数支持重载。
3.udf 必须要有返回类型,可以返回null,但是返回类型不能为void;
4.udf 常用Text/LongWrite 等类型,不推荐使用java类型。

如何编写UDF

创建project 打jar包

<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.6.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>1.1.0</version></dependency>

需要hadoop的common包和hive的hive-exec

编写一个简单的函数

在输出的字段前加上’Hello’

package com.njbdqn;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());}
}

怎么使用函数

使用之前,先把包打包,我打的是瘦包,亲测可使用,如不行,可打胖包。
在这里插入图片描述

然后通过xftp传输到linux上
在这里插入图片描述

在linux启动了hadoop的前提下上传至hdfs端

将包上传hdfs:
hdfs dfs -mkdir -p /func
hdfs dfs -put /opt/jar/myfun-1.0-SNAPSHOT.jar /func

进入hive界面开始添加函数:

hive> add jar hdfs://192.168.56.100:9000/func/myfun-1.0-SNAPSHOT.jar;

创建新函数

create function mytest as "com.njbdqn.MyFunc";

选择表进行试验:

hive> select mytest(username) from userinfos limit 3;
OK
Hello,lhqye
Hello,gaqhq
Hello,thfqn
Time taken: 0.305 seconds, Fetched: 3 row(s)

此为原表内容:

hive> select username from userinfos limit 3;
OK
lhqye
gaqhq
thfqn
Time taken: 0.096 seconds, Fetched: 3 row(s)

可见此时编写的简单UDF函数已起作用。


http://chatgpt.dhexx.cn/article/25H4IIdu.shtml

相关文章

《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解析 …

AQS中的公平锁和非公平锁

正文 公平锁&#xff1a;多个线程按照申请锁的顺序去获得锁&#xff0c;线程会直接进入队列去排队&#xff0c;永远都是队列的第一位才能得到锁。 优点&#xff1a;所有的线程都能得到资源&#xff0c;不会饿死在队列中。 缺点&#xff1a;吞吐量会下降很多&#xff0c;队列里…