# （五）Hive的UDF、UDAF和UDTF自定义函数

## 四，函数

### 1，排序

order by（全局排序）：不经常用 sort by+distrbutre by ：经常用

set mapreduce.job.reduce=3; select * from emp sort by empno desc; select sal,deptno from emp distribute by sal sort by sal;

cluster by：只能是升序排序，相当于（sort by+distrbutre by ） select sal,deptno from emp cluster bY sal;

### 2.自带函数

select concat_ws('_','sdfsdf','sdfs','123'); select cast('000000000000123123123123' as bigint); select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1','HOST'); select get_json_object('{"name":"jack","age":"20"}','\$.name');

load data inpath '/data/inner/RAW/01/t_movie/movie' into table t_movie;

select * from t_movie; select name,split(type,',') from t_movie; select explode(split(type,',')) from t_movie;

select name,tcol from t_movie LATERAL VIEW explode(split(type,',')) typetable AS tcol;

create table t_wordcount( wordline string ) row format delimited fields terminated by '\n' location '/data/inner/ODS/01/t_wordcount';

load data inpath '/data/inner/RAW/01/t_wordcount/harry' into table t_wordcount; select word,count(word) from t_wordcount lateral view explode(split(wordline,' ')) eswtable as word group by word; select word,count(word) from (select explode(split(wordline,' ')) word from t_wordcount) esw group by word;

### 3.自定义函数

UDF： public class UDFHello extends UDF { public static String evaluate(String value) { .................. } }

hadoop fs -mkdir -p /bdp/hive/bin/lib hadoop fs -put ./demouf.jar /bdp/hive/bin/lib create function sxt_hello as 'com.vincent.UDFHello' using jar 'hdfs:////bdp/hive/bin/lib/demouf.jar';

UDAF： public static class SxtInnerClass implements UDAFEvaluator { @Override //获取Hive的集群信息 public void init() {} //输入数据端，进行map操作 public boolean iterate(String value) {} //数据输出端，进行reduce输出 public int terminatePartial() {} public String terminate() {} } }

UDTF： public class ExplodeMap extends GenericUDTF { @Override //数据结果：主要用来写逻辑操作 public void process(Object[] args){} @Override //数据输入端：主要用来检测数据是否符合标准 public StructObjectInspector initialize(ObjectInspector[] args){} @Override //关闭 public void close() {}

}

0 条评论

• ### （三）Hive基本操作命令

1.DML（DataManipulationLanguage）：数据操作语言，用来定义数据库记录； 2.DCL（DataControlLanguage）：数据...

• ### （四）Java读写文件，合并成新的文件

AppCrashed participate__recharge_activity participate_activity

• ### 番外：Ubuntu虚拟机，帐户密码忘记并修改

3.将recovery nomodeset，改成quiet splash rw init=/bin/bash 然后按F10, 启动

• ### ASP.NET 调味品：AJAX

Karl Seguin 适用于： AJAX（异步 JavaScript 和 XML） Microsoft AJAX.NET Microsoft ASP.NET ...

• ### Gof设计模式之七大设计原则（六）

前言 今天的设计原则重理论，举例子只能是文字形式，没法使用代码解释，希望大家可以多读几遍。真正体会到设计原则的好处。每一个设计原则，我都尽量用非...

• ### sql注入学习总结

所谓SQL注入，就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串，最终达到欺骗服务器执行恶意的SQL命令。

• ### 你知道豆瓣电影是怎么评分的吗？

“假设，是针对我们的分析结果而言。你希望最后输出一个什么结果，或者你需要证明什么结果，都可以当做假设！”

• ### 爬虫实战-手把手教你爬豆瓣电影

如果上面三小节还有问题，可以点回去再复习一下。作为基础内容并不是要求大家一定都掌握，特别是第三小节，网页解析用法特别多，一般人很难都记住。 我在写这篇的时候也...

• ### Python 实战（3）：更多的页面

现在我们网站已经有了一个简单的页面、一段简单的请求处理代码和一个简单的数据库。上次最后我剧透了下，之后将会通过豆瓣电影的 API 获取更多的电影数据。不过在此之...

• ### NewLife.XCode中如何借助分部抽象多个具有很多共同字段的实体类

背景： 两个实体类：租房图片、售房图片 这两个表用于存储房源图片记录，一个房源对应多个图片，两个表的差别就在于一个业务关联字段。 租房图片中的RentID记录这...