三 Hive 数据处理 自定义函数UDF和Transform
三 Hive 自定义函数UDF和Transform
开篇提示:
快速链接beeline的方式:
./beeline -u jdbc:hive2://hadoop1:10000 -n hadoop
1.自定义函数UDF
当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)
UDF 作用于单个数据行,产生一个数据行作为输出。(数学函数,字符串函数)
2开发实例
2.1 原始数据格式
{"movie":"1193","rate":"5","timeStamp":"978300760","uid":"1"}
{"movie":"661","rate":"3","timeStamp":"978302109","uid":"1"}
{"movie":"914","rate":"3","timeStamp":"978301968","uid":"1"}
{"movie":"3408","rate":"4","timeStamp":"978300275","uid":"1"}
{"movie":"2355","rate":"5","timeStamp":"978824291","uid":"1"}
{"movie":"1197","rate":"3","timeStamp":"978302268","uid":"1"}
{"movie":"1287","rate":"5","timeStamp":"978302039","uid":"1"}
{"movie":"2804","rate":"5","timeStamp":"978300719","uid":"1"}
{"movie":"594","rate":"4","timeStamp":"978302268","uid":"1"}
{"movie":"919","rate":"4","timeStamp":"978301368","uid":"1"}
{"movie":"595","rate":"5","timeStamp":"978824268","uid":"1"}
{"movie":"938","rate":"4","timeStamp":"978301752","uid":"1"}
2.2 创建数据表
create table t_rating (line string)
row format delimited;
2.3 导入数据
load data local inpath '/home/hadoop/rating.json' into table t_rating;
2.4 开发UDF程序
package cn.itcast.hive; import org.apache.hadoop.hive.ql.exec.UDF;
import org.codehaus.jackson.map.ObjectMapper; /**
* @author ntjr
* 解析json数据
*
*/
public class PaserJson extends UDF {
private ObjectMapper mapper = new ObjectMapper(); public String evaluate(String line) { try {
RatingBean ratingBean = mapper.readValue(line, RatingBean.class);
return ratingBean.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
}
用于解析t_rating表中每一行的json数据。
package cn.itcast.hive;
public class RatingBean {
private String movie;
private String rate;
private String timeStamp;
private String uid;
public String getMovie() {
return movie;
}
public void setMovie(String movie) {
this.movie = movie;
}
public String getRate() {
return rate;
}
public void setRate(String rate) {
this.rate = rate;
}
public String getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
@Override
public String toString() {
return movie + "\t" + rate + "\t" + timeStamp + "\t" + uid;
}
}
2.4将udf程序打成jar 导入hive
add JAR /home/hadoop/udf.jar;
2.5 创建临时函数与开发好的udf进行关联
create temporary function paseJson as 'cn.itcast.hive.PaserJson';
2.6 创建完整字段的t_rating02表(用于存放将单列json数据表t_rating转换成多列数据表t_rating02的结果)
create table t_rating02 as
select split(paseJson(line),'\t')[0] as movieid,
split(paseJson(line),'\t')[1] as rate,
split(paseJson(line),'\t')[2] as timestring,
split(paseJson(line),'\t')[3] as uid
from t_rating;
至此:完成字段表t_rating02转换完成。
3.利用Transfrom将t_rating02表中的timestring字段转换成周几的形式。
3.1 t_rating02中的样式:

3.2编写weekday_mapper.py脚本,处理t_rating02表中的timestring字段
#!/bin/python
import sys
import datetime for line in sys.stdin:
line = line.strip()
movieid, rating, unixtime,userid = line.split('\t')
weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()
print '\t'.join([movieid, rating, str(weekday),userid])
3.3 上传weekday_mapper.py脚本,前提是保证本机装有python
add FILE weekday_mapper.py;
3.4 创建新表t_rating_date,保存脚本处理后的数据
create TABLE t_rating_date as
SELECT
TRANSFORM (movieid , rate, timestring,uid)
USING 'python weekday_mapper.py'
AS (movieid, rating, weekday,userid)
FROM t_rating02;
3.5查看t_rating_date表

至此将json数据转换成数据表。
三 Hive 数据处理 自定义函数UDF和Transform的更多相关文章
- HIVE 编写自定义函数UDF
一 新建JAVA项目 并添加 hive-exec-2.1.0.jar 和hadoop-common-2.7.3.jar hive-exec-2.1.0.jar 在HIVE安装目录的lib目录下 had ...
- hive自定义函数UDF UDTF UDAF
Hive 自定义函数 UDF UDTF UDAF 1.UDF:用户定义(普通)函数,只对单行数值产生作用: UDF只能实现一进一出的操作. 定义udf 计算两个数最小值 public class Mi ...
- Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function)
Hadoop生态圈-Hive的自定义函数之UDF(User-Defined-Function) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Spark(十三)SparkSQL的自定义函数UDF与开窗函数
一 自定义函数UDF 在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_ ...
- SparkSQL中的自定义函数UDF
在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_date等 UDAF( ...
- 【Hive】自定义函数
Hive的自定义函数无法满足实际业务的需要,所以为了扩展性,Hive官方提供了自定义函数来实现需要的业务场景. 1.定义 (1)udf(user defined function): 自定义函数,特 ...
- 10_Hive自定义函数UDF
Hive官方的UDF手册地址是:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1.使用内置函数的快捷方法: 创 ...
- 大数据学习day29-----spark09-------1. 练习: 统计店铺按月份的销售额和累计到该月的总销售额(SQL, DSL,RDD) 2. 分组topN的实现(row_number(), rank(), dense_rank()方法的区别)3. spark自定义函数-UDF
1. 练习 数据: (1)需求1:统计有过连续3天以上销售的店铺有哪些,并且计算出连续三天以上的销售额 第一步:将每天的金额求和(同一天可能会有多个订单) SELECT sid,dt,SUM(mone ...
- T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst、语言版本影响!
原文:T-SQL: 17 个与日期时间相关的自定义函数(UDF),周日作为周的最后一天,均不受 @@DateFirst.语言版本影响! CSDN 的 Blog 太滥了!无时不刻地在坏! 开始抢救性搬家 ...
随机推荐
- Mysql数据库,表中有中文时,select出来好多问号(?)的解决方法
在QQ群里问了一些高手,同时参考了这篇文章:http://huangyunbin.iteye.com/blog/1113983,终于把这个问题搞定了. 首先,我用的是zip包的Mysql,直接解压使用 ...
- JAVA二叉树递归构造、二叉树普通遍历及递归遍历
二叉树类: package com.antis.tree; public class BinaryTree { int data; //根节点数据 BinaryTree left; //左子树 Bin ...
- v-bind:的基本用法
1. v-bind:class(根据需求进行选择) <style> .box{ background-color: #ff0; } .textColor{ color: #000; } . ...
- viewsate用法
ViewState["名称"]="ssss";直接赋值取值只能在同一个页面使用, 离开页面就会失效
- 自动化构建工具grunt的学习
关于grunt的一些记录,记的比较乱... 0.删除node_modules文件夹 命令行: npm install rimraf -g //先运行 rimraf node_modules //然后运 ...
- FastReport.net分组排序、打印顺序、分页、函数使用语法、数据块编辑
本人使用的是FastReport.net1.0版,不涉及到任何代码,只是在FastReport中对打印模板的属性进行调整 1.设置打印顺序需要注意的属性 1)分组页眉中有个属性叫“condition” ...
- 【Node.js】新建一个NodeJS 4.X项目
前提工作 1.安装Node.js 各种下一步就好 2.安装NPM(node package manager) 安装好Node.js之后,打开cmd,输入npm install npm -g,程序会自动 ...
- Jewels and Stones
题目如下 You're given strings J representing the types of stones that are jewels, and S representing the ...
- 谷歌浏览器添加flash白名单
69以前的版本: 打开 chrome://settings/content/flash 上图中应该有一个"添加"选项 , 依次输入: *.]com [*.]net [*.]org ...
- Jquery中数值求和及根据余数改变对应的数值样式
Jquery内容 <script type="text/javascript"> $(function () { var num = 0; $(".box o ...