文档章节

Hive添加自定义UDF函数

Liam8
 Liam8
发布于 2017/02/26 21:10
字数 439
阅读 60
收藏 0

1 编写UDF类

以简单的处理单个字段的UDF函数为例,开发自定义UDF函数需要继承'org.apache.hadoop.hive.ql.exec.UDF'类. 可以通过Maven添加,pom文件中加入(版本号跟Hive版本一致即可):

<dependency>
  <groupId>org.apache.hive</groupId>
  <artifactId>hive-exec</artifactId>
  <version>0.13.1</version>
</dependency>

最简单的实现只需继承UDF类,并实现evaluate函数.如下UDF函数用来将IP(v4)地址转换为整数.

    package ml.liam8.hive;

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

    /**
    * Convert IPv4 to a num which type is Long in java.
    * Created by Liam on 2016/4/11.
    */
    @Description(name = "IpToNum", value = "_FUNC_(ip) - Convert IPv4 to a num(long).")
    public class IpToNum extends UDF {

      public long evaluate(String ip) {
          String[] nums = ip.split("\\.");
          return Long.parseLong(nums[3]) + Long.parseLong(nums[2]) * 256
             + Long.parseLong(nums[1]) * 65536 + Long.parseLong(nums[0]) * 16777216;
      }

    }

evaluate方法的输入输出即是UDF函数的输入输出. Description注解部分提供函数的帮助信息.

执行: desc function test.iptonum 输出: test.iptonum(ip) - Convert IPv4 to a num(long).

源码已上传 Github

2 部署及创建UDF函数

ps:Hive0.13及以后版本适用

部署jar包

将jar包复制到HDFS.

    hdfs -dfs -put udfs-0.1.jar 'hdfs:///user/hadoop/hiveUDF'

创建永久函数

需在Hive中执行sql语句,格式如下:

CREATE FUNCTION [db_name.]function_name AS class_name
  [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];

如:

create function test.iptonum as 'com.liam8.hive.IpToNum' using jar 'hdfs:///user/hadoop/hiveUDF/udfs-0.1.jar'

函数需要属于某个库,如这里是'test',当其他库调用时,需要加上库名,如'test.iptonum'.

调用方式: select test.iptonum('127.0.0.1');

创建临时函数

临时函数只在当前session中有效,临时函数不能指定库.

create temporary function iptonum as 'com.liam8.hive.IpToNum' using jar 'hdfs:///user/hadoop/hiveUDF/udfs-0.1.jar'

调用方式: select iptonum('127.0.0.1');

3 参考资料

LanguageManualDDL-PermanentFunctions

HivePlugins

原文地址:http://liam8.ml/2016/04/11/add-udf-to-hive/

© 著作权归作者所有

上一篇: Spark读写MySQL
Liam8
粉丝 8
博文 6
码字总数 3082
作品 0
深圳
私信 提问
Hadoop Hive概念学习系列之hive里的用户定义函数UDF

Hive可以通过实现用户定义函数(User-Defined Functions,UDF)进行扩展(事实上,大多数Hive功能都是通过扩展UDF实现的)。想要开发UDF程序,需要继承org.apache.hadoop.ql.exec.UDF类,并重...

sjyttkl
2018/04/22
0
0
hive自定义函数

自定义函数包括三种UDF、UDAF、UDTF UDF(User-Defined-Function) 一进一出 UDAF(User- Defined Aggregation Funcation) 聚集函数,多进一出。Count/max/min UDTF(User-Defined Table-Generat......

张欢19933
2016/09/20
97
0
大数据教程(12.3)Hive函数

本篇博客博主将分享Hive函数的基础知识. 1.内置运算符(https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF) 2.内置函数(https://cwiki.apache.org/confluence/display......

em_aaron
01/31
27
0
[Hive]Hive自定义函数UDF

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/53244868 当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用...

sjf0115
2016/11/20
0
0
利用eclipse编写自定义hive udf函数

在做日志分析的过程中,用到了hadoop框架中的hive,不过有些日志处理用hive中的函数处理显得力不从心,就需要用udf来进行扩展处理了 1 在eclipse中新建java project hiveudf 然后新建class p...

大数据之路
2012/10/21
2.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.3K
15
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
39
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部