Hive 自定义函数

hive 支持自定义UDF,UDTF,UDAF函数

以自定义UDF为例:

使用一个名为evaluate的方法

package com.hive.custom;

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

public class XiaoUDF extends UDF {

    /**
     *  值加1000
     * @param i
     * @return val
     */
    public IntWritable evaluate(final IntWritable i) {
     int val= i.get();
     val+=1000;
        return new IntWritable(val);
      }
}

将写好的代码打为jar包,上传到服务器,或者hdfs

add jar /root/udfxiao.jar;
//add jar you.jar

注册函数

 注册一个临时函数

create temporary function fei  as 'com.hive.custom.XiaoUDF';
//fei:注册的函数名
//com.hive.custom.XiaoUDF 注册函数的全类名

使用函数

select fei(id) from test;

注册永久函数

create  function testdb.peng  as 'com.hive.custom.XiaoUDF';
//testdb 注册永久函数的数据库

从HDFS上注册函数

CREATE FUNCTION fei AS 'com.hive.custom.XiaoUDF' USING JAR 'hdfs:///udfxiao.jar';
// fei 注册的函数名
//com.hive.custom.XiaoUDF  函数的全内名
//hdfs:///udfxiao.jar   hdfs上根目录下的jar

 

删除函数

drop temporary function if exists fei;

 

 

转载于:https://www.cnblogs.com/jottings/p/8387352.html

### Hive中创建和使用自定义函数(UDF) 在Hive中,用户可以通过编写Java代码来自定义函数(User Defined Function, UDF),以扩展其功能并满足特定需求。以下是关于如何在Hive中创建和使用自定义函数的具体说明。 #### 1. 编写自定义函数 要实现一个简单的UDF,可以按照以下步骤操作: - **创建Java项目** 需要使用Maven或其他构建工具创建一个新的Java项目[^1]。 - **继承`org.apache.hadoop.hive.ql.exec.UDF`类** 所有的Hive UDF都需要继承该基类,并重写其中的`evaluate()`方法[^1]。 下面是一个具体的例子,展示了一个名为`HelloUdf`的简单UDF,它会在输入字符串前加上"Hello:"字样。 ```java import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; public class HelloUdf extends UDF { public Text evaluate(final Text input) { if (input == null) return null; try { return new Text("Hello: " + input.toString()); } catch (Exception e) { return null; } } public static void main(String[] args){ System.out.println(new HelloUdf().evaluate(new Text("world"))); } } ``` 此代码片段展示了如何通过继承`UDF`类以及重载`evaluate()`方法来完成基本的功能逻辑。 #### 2. 构建JAR文件 编译完成后,将生成的`.class`文件打包成JAR包以便后续加载到Hive环境中[^1]。 #### 3. 将JAR上传至HDFS 由于Hive运行环境通常依赖于分布式存储系统(如HDFS),因此需要先将本地生成好的JAR文件上传到HDFS上指定位置[^2]。 假设已经有一个可用的HDFS路径 `/udf/myudf.jar` 存储了刚才制作完毕后的 JAR 文件,则可以直接跳过这一步骤继续下一步配置工作流程即可。 #### 4. 注册与调用UDF 进入Hive CLI界面之后执行如下命令注册新创建出来的 UDF 函数实例对象 `my_len2` 并关联对应的全限定名 Java 类名称 `"com.hive.udf.MyUDF"` 同时指明外部资源库所在具体地址信息为 HDFS 上面某处实际存在的有效链接形式表示出来作为参数传递给 system call 命令行解释器处理程序去解析识别进而完成整个过程设置动作[^2]: ```sql ADD JAR hdfs://hadoop102:8020/udf/myudf.jar; CREATE TEMPORARY FUNCTION my_udf AS 'com.example.HelloUdf'; SELECT my_udf('test') FROM some_table LIMIT 10; ``` 上述SQL语句实现了以下几个目标: - 添加包含自定义函数的JAR包; - 定义临时函数供当前会话期间使用; - 测试调用了刚刚引入的新功能验证其实现效果是否符合预期设定标准要求范围之内[^2]。 --- ### 注意事项 - 如果希望让某个特定版本号下的hive支持长期有效的全局共享型插件机制的话就需要考虑采用更加复杂一点的方式来部署实施解决方案比如修改默认初始化脚本或者利用其他高级特性选项等等[^2]。 - 确保所使用的类路径无误并且能够被集群节点正确访问到以免引发不必要的错误异常情况发生影响整体性能表现水平下降等问题出现风险隐患存在可能性增大趋势明显可见度提高很多倍数以上程度不等具体情况视实际情况而定最终决定因素取决于个人喜好习惯偏好不同而已罢了[^2]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值