Hive添加自定义UDF函数 |
您所在的位置:网站首页 › hive添加udf函数 › Hive添加自定义UDF函数 |
1 编写UDF类
以简单的处理单个字段的UDF函数为例,开发自定义UDF函数需要继承’org.apache.hadoop.hive.ql.exec.UDF’类. 可以通过Maven添加,pom文件中加入(版本号跟Hive版本一致即可): dependency> groupId>org.apache.hivegroupId> artifactId>hive-execartifactId> version>0.13.1version> dependency>最简单的实现只需继承UDF类,并实现evaluate函数.如下UDF函数用来将IP(v4)地址转换为整数. package com.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'); 4 参考资料LanguageManualDDL-PermanentFunctions HivePlugins |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |