`

Hive UDF编程

    博客分类:
  • Hive
阅读更多

在该类中加入 evaluate 方法

"evaluate" should never be a void method. However it can return "null" if * needed.

 

 

public class UDFLastDay extends UDF{
	private final SimpleDateFormat inputFormatter = new SimpleDateFormat("yyyy-MM-dd");
	private final SimpleDateFormat outFormatter = new SimpleDateFormat("yyyy-MM-dd");
	
	private final Calendar calendar = Calendar.getInstance();
	
	
	Text result = new Text();
	
	//  2015-03-01  ==> 2015-03-31
	public Text evaluate(Text input) {
		
		if(null == input || StringUtils.isBlank(input.toString())) {
			return null;
		}
		
		try {
			calendar.setTime(inputFormatter.parse(input.toString()));
			int lastDate = calendar.getActualMaximum(Calendar.DATE);  //获得到月份最大的天数
			calendar.set(Calendar.DATE, lastDate);
			
			result.set(outFormatter.format(calendar.getTime()));
			
			return result;
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
	}
}

 

  • 打包放到 linux 某个目录下 例如: /home/hadoop/software/lib/udf.jar 
  • 如何将UDF加入到hive中使用?

方式一:(当前session有效)

add jar /home/hadoop/software/lib/udf.jar ;

create temporary function getLastDay as 'com.cloudyhadoop.bigdata.udf.UDFLastDay';

 

show functions;

select empno, ename, hiredate, getLastDay(hiredate) last_day from emp;

 方式二:(全局有效)

hive-site.xml中添加如下配置信息:

<property>

<name>hive.aux.jars.path</name>

<value>file:///home/hadoop/software/lib/udf.jar</value>

</property>

 

启动hive之后,就不需要再:add jar /home/hadoop/software/lib/udf.jar ;

create temporary function getLastDay as 'com.cloudyhadoop.bigdata.udf.UDFLastDay';

 

temporary:  current session, 退出或者重启之后函数丢失

 

如何做到全局有效?

1、https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Create/DropFunction

CREATE FUNCTION [db_name.]function_name AS class_name

  [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];

2、修改源代码

https://github.com/cloudera/hive/blob/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java

registerUDF("getLastDay", UDFLastDay.class, false);

重新编译、部署

 

 

分享到:
评论

相关推荐

    Hive编程指南

    · 获得创建用户自定义函数(UDF)的最佳方法。 · 了解应该使用的Hive模式以及应该避免的反模式。 · 将Hive和其他数据处理程序进行整合。 · 对于NoSQL数据库和其他数据存储使用存储控制器。 · 学习在亚马逊弹性...

    hive编程指南中文版

    · 获得创建用户自定义函数(UDF)的最佳方法。 · 了解应该使用的Hive模式以及应该避免的反模式。 · 将Hive和其他数据处理程序进行整合。 · 对于NoSQL数据库和其他数据存储使用存储控制器。 · 学习在亚马逊弹性...

    styhadoop:大数据相关知识

    hiveUDF 程序依赖程序包 groupID org.apache.hive hive-exec hive-common 同时需要hadoop的hadoop-common hiveUDF使用 add jar /home/hadoop/styhadoop-1.0-SNAPSHOT.jar; CREATE TEMPORARY FUNCTION decode AS '...

    woothee:多种语言的用户代理解析器分类器

    (和Hive UDF) (Node.js或浏览器) 版本号 v1.11.1 在测试集中更新GSA版本 v1.11.0 添加Google搜索应用 v1.10.0 添加适用于iOS / Android的Microsoft Edge(基于Chromium),Edge v1.9.0 添加Android 9 v1.8.0...

    大数据场景化解决方案.pdf

    UDF(User-Defined-Function) ⽤于接收单个数据⾏,并产⽣⼀个数据⾏作为输出。 UDAF(User-Defined Aggregation Function) ⽤于接收多个数据⾏,并产⽣⼀个数据⾏作为输出。 UDTF(User-Defined Table-Generating ...

    Hadoop实战中文版

    Hive及Hadoop群 11.1 Hive 11.1.1 安装与配置Hive 11.1.2 查询的示例 11.1.3 深入HiveQL 11.1.4 Hive小结 11.2 其他Hadoop 相关的部分 11.2.1 HBase 11.2.2 ZooKeeper 11.2.3 Cascading 11.2.4 Cloudera ...

    Hadoop实战(陆嘉恒)译

    用Pig编程10.1 像Pig 一样思考10.1.1 数据流语言10.1.2 数据类型10.1.3 用户定义函数10.2 安装Pig10.3 运行Pig10.4 通过Grunt 学习Pig Latin10.5 谈谈Pig Latin10.5.1 数据类型和schema10.5.2 表达式和函数10.5.3 ...

    Hadoop实战

    20110.9 小结 206第11章 Hive及Hadoop群 20711.1 Hive 20711.1.1 安装与配置Hive 20811.1.2 查询的示例 21011.1.3 深入HiveQL 21311.1.4 Hive小结 22111.2 其他Hadoop相关的部分 22111.2.1 HBase 22111.2.2 ...

    Spark分布式内存计算框架视频教程

    10.自定义函数UDF 11.分布式SQL引擎(spakr-sql和Spark ThriftServer) 12.Catalyst 优化器 第四章、离线综合实战 1.综合实战概述(需求、调研、业务) 2.环境搭建(大数据环境和应用开发环境) 3.项目初始化(工具...

    Hadoop实战中文版.PDF

    206第11章 Hive及Hadoop群 20711.1 Hive 20711.1.1 安装与配置Hive 20811.1.2 查询的示例 21011.1.3 深入HiveQL 21311.1.4 Hive小结 22111.2 其他Hadoop相关的部分 22111.2.1 HBase 22111.2.2 ...

    Spark:Apache Spark是一个快速的内存数据处理引擎,具有优雅且富有表现力的开发API,可让数据工作者高效执行需要快速迭代访问数据集的流,机器学习或SQL工作负载。该项目将在Scala中提供Spark的示例程序语

    使用Spark-2.1实现自定义UDF,UDAF,Partitioner 使用数据框(ComplexSchema,DropDuplicates,DatasetConversion,GroupingAndAggregation) 使用数据集处理Parquet文件按特定列对数据进行分区并按分区进行存储使用...

Global site tag (gtag.js) - Google Analytics