1006-hive的自定义UDF函数

hive可以任意定义一个函数,然后该函数放到hive的classpath下,在进入hive中,使用该命令操作

场景:设中国移动的用户在商城上下单,下单记录的主要字段包括

订单号     手机号码               商品编码          商品数量          渠道

10000     18810637891     bm0001          1                      0001

10001     18710637891     bm0002          2                      0002

10002     18710637891     bm0001          1                      0001

10003     18610637891     bm0002          2                      0003

10004     18610637891     bm0002          5                      0001

10005     18610637891     bm0004          2                      0005

已知:如何根据手机号得知该用户对应的省份。假设规则如下(即:手机号前三位和省份的对应的关系)

188     北京(bj)

187     上海(sh)

186     河北(hb)

对上面的记录在手机号的后面加上省份字段,然后把其余字段输出并上传hdfs上

解决方案:

1、下单记录日志存放在日志文件jforder.log中

[[email protected] sbin]$ hadoop fs -mkdir /external

[[email protected] sbin]$ hadoop fs -mkdir /external/hive

hive> create external table  jf_order (orderNo string ,mobileNo string,wareCode string,amount int ,channel string)

> row format delimited

> fields terminated by ‘\t‘

> location ‘/external/hive‘;

[[email protected] ~]$ more jforder.log

10000     18810637891     bm0001     1     0001

10001     18710637891     bm0002     2     0002

10002     18710637891     bm0001     1     0001

10003     18610637891     bm0002     2     0003

10004     18610637891     bm0002     5     0001

10005     18610637891     bm0004     2     0005

[[email protected] ~]$ hadoop fs -put jforder.log /external/hive

2、编写hive的函数areaFunction,作用根据手机号获取对应的用户省份

3、启动eclipse,编写udf函数

/**

@function: 定义省份转换函数,加载hive的 classpath下,可以直接使用

@author shenfl

@version:1.0

@date: 2015 -5- 31

*

*/

public class AreaFunction extends UDF
{

/*定义静态变量*/

public static Map<String, String> map = new HashMap<String,String >();

/*可扩展数据数据库获取*/

static{

map .put("188" ,"北京" );

map .put("187" , "上海" );

map .put("186" ,"河北" );

}

public String evaluate(String mobileNumber ){

return mobileNumber + "\t" + map .get(mobileNumber .substring(0,
3));

}

public static void main(String [] args )
{

AreaFunction area = new AreaFunction();

String mobileNumber = "18810635789" ;

String rs = area.evaluate( mobileNumber );

System. out .println(rs );

}

}

4、上传编写的函数,把编写好的函数放到hive的classpath下

hive>add jar /home/hadoop/hiveudf.jar;

hive>create temporary function area2 as ‘com.hive.AreaFunction‘;

5、验证

hive> select orderNo ,area2(mobileno),wareCode,amount ,channel from jf_order;

6、强化后的结果存储到hdfs上

hive> insert overwrite directory  ‘/hiveout‘  select orderNo ,area2(mobileno),wareCode,amount ,channel from jf_order;

时间: 2024-07-30 10:13:05

1006-hive的自定义UDF函数的相关文章

如何给Apache Pig自定义UDF函数?

近日由于工作所需,需要使用到Pig来分析线上的搜索日志数据,散仙本打算使用hive来分析的,但由于种种原因,没有用成,而Pig(pig0.12-cdh)散仙一直没有接触过,所以只能临阵磨枪了,花了两天时间,大致看完了pig官网的文档,在看文档期间,也是边实战边学习,这样以来,对pig的学习,会更加容易,当然本篇不是介绍如何快速学好一门框架或语言的文章,正如标题所示,散仙打算介绍下如何在Pig中,使用用户自定义的UDF函数,关于学习经验,散仙会在后面的文章里介绍. 一旦你学会了UDF的使用,就意味

Hive与MapReduce相关排序及自定义UDF函数

原文链接: https://www.toutiao.com/i6770870821809291788/ Hive和mapreduce相关的排序和运行的参数 1.设置每个reduce处理的数据量(单位是字节) 我们在hive中查看下 配置文件hive-site.xml.template 我们打开配置文件可以看到 这是256MB 如果超过1G,将使用4个reducers 2.设置最大运行的reduce的个数 同上我们可以在配置中找到下面的内容 复制到记事本里,简化了描述,从配置中我们可以看到默认re

hive 的udf 函数使用

1)依据课程讲解UDF编程案例,完成练习,总结开发UDF步骤,代码贴图,给予注释,重点 2)更改emp 表中名字的大写给为小写. 一:hive 的udf 函数: 1.1 hive UDF 函数概述: 1. hive自带了一些函数比如:max/min 等,但是由于自带的函数数量有限,自己可以定义udf来方便扩展. 2. udf 函数可以直接应用于select 语句,对查询结构做格式化处理之后,然后再输出内容. 1.2 hive 编写udf函数的时候需要注意的地方: 1. 自定义udf函数需要继承o

玩转大数据系列之Apache Pig如何通过自定义UDF查询数据库(五)

GMV(一定时间内的成交总额)是一个衡量电商网站营业收入的一项重要指标,例如淘宝,京东都有这样的衡量标准,感兴趣的朋友可以自己科普下这方面的概念知识. 当然散仙今天,并不是来解释概念的,而是记录下最近工作的一些东西,原来我们平台的GMV只有一个总的成交金额,并没有细分到各个系统的GMV的比重,比如搜索端,推荐端,移动端等等. 通过细粒度的分析各个系统所占的比重,对于指导各个系统完善和发展有一定的重要意义,这里不就深说了,下面先来看下散仙分析的搜索gmv的数据布局方式. (1)Hadoop集群上,

自定义udf添加一列

//创建得分窗口字典 var dict= new mutable.HashMap[Double, Int]() for (i <- 0 to result_Score.length-1 ){ dict.put(result_Score(i),i+1) } //自定义Udf函数 添加一列 sparkHiveSession.udf.register("getWindow", (ss11: Double) => { val winno:Int = dict(ss11) winno

如何编写自定义hive UDF函数

Hive可以允许用户编写自己定义的函数UDF,来在查询中使用.Hive中有3种UDF: UDF:操作单个数据行,产生单个数据行: UDAF:操作多个数据行,产生一个数据行. UDTF:操作一个数据行,产生多个数据行一个表作为输出. 用户构建的UDF使用过程如下: 第一步:继承UDF或者UDAF或者UDTF,实现特定的方法. UDF实例参见http://svn.apache.org/repos/asf/hive/trunk/contrib/src/java/org/apache/hadoop/hi

HIVE 编写自定义函数UDF

一 新建JAVA项目 并添加 hive-exec-2.1.0.jar 和hadoop-common-2.7.3.jar hive-exec-2.1.0.jar 在HIVE安装目录的lib目录下 hadoop-common-2.7.3.jar在hadoop的安装目录下的\share\hadoop\common 二 编一个一个类并继承UDF 并重写evaluate方法 下面以rownum为例 package com.udf; import org.apache.hadoop.hive.ql.exec

Hive学习之自定义聚合函数

Hive支持用户自定义聚合函数(UDAF),这种类型的函数提供了更加强大的数据处理功能.Hive支持两种类型的UDAF:简单型和通用型.正如名称所暗示的,简单型UDAF的实现非常简单,但由于使用了反射的原因会出现性能的损耗,并且不支持长度可变的参数列表等特征.而通用型UDAF虽然支持长度可变的参数等特征,但不像简单型那么容易编写. 这篇文章将学习编写UDAF的规则,比如需要实现哪些接口,继承哪些类,定义哪些方法等, 实现通用型UDAF需要编写两个类:解析器和计算器.解析器负责UDAF的参数检查,

【甘道夫】开发Hive自定义UDF,生成32位字母数字随机串

引言 曾经认为Hive自带的函数应该可以cover住我的日常所需,心想那些需要使用自定义函数的场景是不是太奇葩,谁知命运弄人,自己还是碰上了. 需求很简单,我需要模拟Oracle中的SYS_GUID()函数,生成一个32位的字母数字随机串. 开发环境:Eclipse+Maven,引入Hive0.13.1的依赖. 欢迎转载,请注明来源: http://blog.csdn.net/u010967382/article/details/41083617 代码 package cn.fulong.big