Hadoop好友推荐系统-聚类中心及占比查看

来源:互联网 发布:java程序下载 编辑:程序博客网 时间:2024/06/06 08:41

项目总目录:基于Hadoop的好友推荐系统项目综述

一、前端展示

1、jsp页面

<input class="easyui-validatebox" type="text"    id="group_input_id" data-options="required:true" style="width:300px"                    value="WEB-INF/classes/centervector.dat" />  <a id="group_check_id" href="" class="easyui-linkbutton" data-options="iconCls:'icon-note'">查看</a>  <br><hr><br>    </div>   <div style="padding-left: 30px;font-size: 15px;padding-top:10px;"><br>        这里的数据不包括过滤的数据以及未分类的数据,即只包含已分类的数据<br>    </div>    <div id="group_return_id" style="padding-left: 30px;font-size: 20px;padding-top:10px;"></div>

jsp页面指定了数据的输入文件:WEB-INF/classes/centervector.dat

2、js逻辑

// group //查看聚类中心及占比    $('#group_check_id').bind('click', function(){        var input_i=$('#group2db_input_id').val();        // 弹出进度框        popupProgressbar('聚类中心','聚类中心解析中...',1000);        // ajax 异步提交任务        getCenterAndDisplay("cloud/cloud_groupcheck.action");    });

这里使用getCenterAndDisplay实现任务提交。

/** * 获取中心点并展示 *  * @param url_ */function getCenterAndDisplay(url_){    $.ajax({        url : url_,        data: {},        async:true,        dataType:"json",        context : document.body,        success : function(data) {            closeProgressbar();            var retMsg;            if("true"==data.flag){                retMsg='操作成功!';                // 展示返回数据                $('#group_return_id').html(data.html);            }else{                retMsg='操作失败!失败原因:'+data.msg;            }            $.messager.show({                title : '提示',                msg : retMsg            });        }    });}

二、后台实现

1、action层

对应的action从这里获取:getCenterAndDisplay(“cloud/cloud_groupcheck.action”);

    /**     * 解析本地聚类中心数据,并获得数据库中分类数据占比情况     * 返回前台显示     */    public void groupcheck(){        Map<String,Object> map = new HashMap<String,Object>();        List<String> centerVec=null;        List<String> percentVec=null;        try{            input = input==null ? HUtils.LOCALCENTERFILE:input;            centerVec= Utils.getLines(input);//获取聚类中心            percentVec=  dBService.getPercent(centerVec.size());//计算各个聚类簇占总数的百分比            // 整合数据            StringBuffer buff = new StringBuffer();            buff.append("<br>");            for(int i=0;i<centerVec.size();i++){                buff.append("聚类中心:"+centerVec.get(i)+"\t,占比:"+percentVec.get(i)+"<br>");            }            map.put("html", buff.toString());            map.put("flag","true");        }catch(Exception e){            map.put("flag", "false");            map.put("msg", "解析聚类中心出错!");            e.printStackTrace();        }        Utils.write2PrintWriter(JSON.toJSONString(map));        return ;    }

2、获取聚类中心

Utils.getLines的定义如下:

/**     * 获得input的数据,每行作为一个字符串,全部数据放入list中     * @param input     * @return     * @throws IOException      */    public static List<String> getLines(String input) throws IOException {        List<String> list = new ArrayList<String>();        input = Utils.getRootPathBasedPath(input);        FileReader reader = new FileReader(input);        BufferedReader br = new BufferedReader(reader);        String line = null;        while((line = br.readLine()) != null) {            list.add(line);         }        br.close();        reader.close();        return list;    }

3、计算百分比

    /**     * 获取分类数据占比     *      * @param i     * @return     */    public List<String> getPercent(int k) {        double[] percents = new double[k];        double sum = 0;        String hql = "select count(1) from UserGroup ug where ug.groupType=?";        for (int i = 0; i < k; i++) {            percents[i] = baseDao.count(hql, new Object[] { i + 1 });//查找属于聚类中心i的数据个数            sum += percents[i];//统计数据总数        }        List<String> list = new ArrayList<String>();        for (int i = 0; i < k; i++) {            list.add(Utils.obejct2Percent(percents[i] / sum, 2));// 计算每个聚类簇中数目的百分比,保留两位小数        }        return list;    }

三、程序运行截图

这里写图片描述