如何使用Hive&R从Hadoop集群中提取数据进行分析
2016-05-12 16:02 猎手家园 阅读(7268) 评论(4) 编辑 收藏 举报一个简单的例子!
环境:CentOS6.5
Hadoop集群、Hive、R、RHive,具体安装及调试方法见博客内文档。
1、分析题目
--有一个用户数据样本(表名huserinfo)10万数据左右;
--其中有一个字段:身份证号(id_card)
--身份证号前两位代表:省,例如:11北京,12天津,13河北;
--身份证前x位对照表(表名hidcard_province)
--要求1:计算出每个省份出现的次数,并按从大到小排序取前30个;
--要求2:使用R画出柱状图。
2、编写Hive提取数据脚本:hive_getdata.sql
--创建临时表 DROP TABLE if exists tmp.t_province; CREATE TABLE tmp.t_province( id int, p_name string, cnt int ) COMMENT '用户数据中省份出现次数临时表' --将提取到的数据保存到临时表中 insert overwrite table tmp.t_province select t1.cid, t2.province, t1.cnt from( --取出前30条 select y.rownum, y.cid, y.cnt from( --排序 select x.cid, x.cnt, row_number() over (distribute by x.cnt sort by x.cnt desc) as rownum from( --分组 select a1.cid, count(1) as cnt from --取数据 (select substring(id_card, 0, 2) as cid from bdm.huserinfo)a1 group by a1.cid )x )y where y.rownum <= 30 )t1 join bdm.hidcard_province t2 on t2.id = t1.cid
运行:
[root@Hadoop-NN-01 ~]$ hive -f hive_getdata.sql
查看数据如下图:
hive> select * from tmp.t_province limit 10;
3、编写R语言绘图脚本:r_draw.r
#!/usr/bin/Rscript library(RHive); #加载rhive包 rhive.connect(host ='192.168.100.20'); #rhive连接hive x <- rhive.query('select id from tmp.t_province') x <- x$id y <- rhive.query('select cnt from tmp.t_province') y <- y$cnt library(Cairo) #加载图形渲染库 png("r-province-pic.png", width=960, height=600) #生成图片
#说明:此里可以处理很多问题,可以使用很多算法解决很多的问题,具体算法我就不写了,只简单画个柱柱图,把代码跑通即可! barplot(beside=TRUE, y, #纵轴 names.arg=x, #横轴 ylim=c(0,10000) #纵轴取值范围 还有其它参数,可以根据自己需求设置。 ) title(xlab="province name") #横轴名称 title(ylab="people number") #纵轴名称 #图例参数 lbls <- round(y/sum(y)*100) lbls <- paste(lbls,"%",sep="") lbls <- paste(x, lbls) #设置图例 其它参数根据自己需求设置 legend("topright", lbls) dev.off() #关闭绘图设备 rhive.close() #关闭hive连接
运行:
[root@Hadoop-NN-01 ~]$ Rscript r_draw.r
展示成果:
至此,一个简单的Hadoop-Hive-R实例完成!
PS:R下面中文乱码的问题仍在解决中!
欢迎关注我的公众号:云栖语,不一样的研发视界。

云栖语微信公众号:change-1978
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术