hive+R 实现大数据下属性间相关性的热力图展示

hive+R 实现大数据下属性间相关性的热力图展示

这是自己完成的第一个小程序,特将有价值的地方在此记录下来,包括以下几部分内容:

  • Hive数据导入–Sqoop方式
  • Map键值对实现Excel数据透视表的功能
  • Java连接R
  • 将数据存入R的数据框
  • Java调用R函数作图

一、Hive数据导入

Hive数据常见的导入方式主要有四种:
(1)、从本地文件系统中导入数据到Hive表;
(2)、从HDFS上导入数据到Hive表;
(3)、从别的表中查询出相应的数据并导入到Hive表中;
(4)、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。
这里是选择第三种方式,先将数据导入到本地关系数据库MySql中,然后在Hive中新建相应的表,语句如下:

create table mytable(id string, samaddr string, samno string, class string, time string, year int, month int, day int, norm string, tno int, tname string, value double)row format delimited fields terminated by ’\t’

运用以下Sqoop语句将mysql表中的数据导入到Hive表:

sqoop import –hive-import –connect jdbc:mysql://localhost:3306/mytable –username rootpassword mypassword –table mytable –hive-database mydatabase –hive -table mytable;

二、数据维度转换

由于R分析相关性是针对每一个指标的值进行相关系数分析,然而数据库中所有指标都放在targetNo属性中,其相当于是一维的数据表,需要按每一个数据记录将targetNo中的指标编号重新转换为表的属性,相当于Excel中的数据透视表功能。这里使用Map进行实现,代码如下:

(1).取查询到的数据中所有的指标编号
private List<String> getMyTargetno(JSONArray ja) {
        List<String> targetnos=new ArrayList<String>();
        //保存所有指标编号到String
        for (int i = 0; i < ja.length(); i++) {
            try {
                JSONObject jo = (JSONObject) ja.get(i);
                String stargetno = jo.getString("targetno");
                targetnos.add(stargetno);
                if (i==0 ) {
                        targetnos.add(stargetno);;
                }else {
                    for (int j = i-1; j >=0; j--) {
                        if(stargetno.equals(targetnos.get(j)))
                            break; 
                        else {
                            targetnos.add(stargetno);
                        }   
                        break;
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        List<String> alltargetno = removeDuplicate(targetnos);//去掉重复项
        Collections.sort(alltargetno); //排序
        
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值