Hadoop好友推荐系统-数据库过滤数据到HDFS
来源:互联网 发布:网络剧校花的贴身高手2 编辑:程序博客网 时间:2024/06/06 04:23
项目总目录:基于Hadoop的好友推荐系统项目综述
数据库过滤数据到HDFS
1、前端展示
- jsp页面
<table> <tr> <td><label for="name">输出路径:</label> </td> <td><input class="easyui-validatebox" type="text" id="preprocess_output_id" data-options="required:true" style="width:300px" value="/user/root/_filter/preparevectors" /></td> </tr> <tr> <td><label for="name">生成文件个数:</label> </td> <td><input class="easyui-validatebox" type="text" id="preprocess_record_id" data-options="required:true" style="width:300px" value="4" /></td> </tr> <tr> <td></td> <td><a id="preprocess_submit_id" href="" class="easyui-linkbutton" data-options="iconCls:'icon-door_in'">预处理</a></td> </tr> </table> </div>
- js逻辑
// ===== 数据预处理 数据库到HDFS $('#preprocess_submit_id').bind('click', function(){ var record_=$('#preprocess_record_id').val(); var output_=$('#preprocess_output_id').val(); // 弹出进度框 popupProgressbar('请等待','数据库数据解析并序列化到HFDS中...',1000); // ajax 异步提交任务 callByAJax('cloud/cloud_db2hdfs.action',{record:record_,output:output_}); });
2、后端逻辑
- action层
/** * 数据库数据解析到云平台,为序列文件,是聚类运行的输入文件 * * [IntWritable,DoubleArrIntWritable] */ public void db2hdfs(){ List<Object> list = dBService.getTableAllData("UserData"); Map<String,Object> map = new HashMap<String,Object>(); if(list.size()==0){ map.put("flag", "false"); Utils.write2PrintWriter(JSON.toJSONString(map)); return ; } try{ HUtils.db2hdfs(list,output,Integer.parseInt(record));//解析入库 }catch(Exception e){ map.put("flag", "false"); map.put("msg", e.getMessage()); Utils.write2PrintWriter(JSON.toJSONString(map)); return ; } map.put("flag", "true"); Utils.write2PrintWriter(JSON.toJSONString(map)); return ; }
其中HUtils.db2hdfs的定义如下:
/** * List 解析入HDFS * * @param list * @param fileNums * @throws IOException */ public static void db2hdfs(List<Object> list,String url, int fileNums) throws IOException { if(fileNums<=0||fileNums>9){ fileNums=HUtils.FILTER_PREPAREVECTORS_FILES; } int everyFileNum=(int)Math.ceil((double)list.size()/fileNums);//根据输入记录数和输出文件数计算每个文件存储的记录数 Path path=null; int start=0; int end=start+everyFileNum; for(int i=0;i<fileNums;i++){ // 如果url为空,那么使用默认的即可,否则使用提供的路径 path= new Path(url==null?HUtils.FILTER_PREPAREVECTORS:url+"/part-r-0000"+i);//指定文件输出目录和文件名 if(end>list.size()){ end=list.size(); } try{ db2hdfs(list.subList(start, end),path); start=end; end+=everyFileNum; }catch(IOException e){ throw e; } } Utils.simpleLog("db2HDFS 全部解析上传完成!"); } private static boolean db2hdfs(List<Object> list, Path path) throws IOException { boolean flag =false; int recordNum=0; SequenceFile.Writer writer = null; Configuration conf = getConf(); try { Option optPath = SequenceFile.Writer.file(path); Option optKey = SequenceFile.Writer .keyClass(IntWritable.class); Option optVal = SequenceFile.Writer.valueClass(DoubleArrIntWritable.class); writer = SequenceFile.createWriter(conf, optPath, optKey, optVal); DoubleArrIntWritable dVal = new DoubleArrIntWritable(); IntWritable dKey = new IntWritable(); for (Object user : list) { if(!checkUser(user)){ continue; // 不符合规则 } dVal.setValue(getDoubleArr(user),-1); dKey.set(getIntVal(user)); writer.append(dKey, dVal);// 用户id,<type,用户的有效向量 >// 后面执行分类的时候需要统一格式,所以这里需要反过来 recordNum++; } } catch (IOException e) { Utils.simpleLog("db2HDFS失败,+hdfs file:"+path.toString()); e.printStackTrace(); flag =false; throw e; } finally { IOUtils.closeStream(writer); } flag=true; Utils.simpleLog("db2HDFS 完成,hdfs file:"+path.toString()+",records:"+recordNum); return flag; } /** * 检查用户是否符合规则 * 规则 :reputation>15,upVotes>0,downVotes>0,views>0的用户 * @param user * @return */ private static boolean checkUser(Object user) { UserData ud = (UserData)user; if(ud.getReputation()<=15) return false; if(ud.getUpVotes()<=0) return false; if(ud.getDownVotes()<=0) return false; if(ud.getViews()<=0) return false; return true; }
- service层
/** * 获得tableName的所有数据并返回 * * @param tableName * @return */ public List<Object> getTableAllData(String tableName) { String hql = "from " + tableName + " "; List<Object> list = null; try { list = baseDao.find(hql); } catch (Exception e) { e.printStackTrace(); } return list; }
二、程序运行截图
1、前端
2、后台
3、查看HDFS目录
阅读全文
0 0
- Hadoop好友推荐系统-数据库过滤数据到HDFS
- Hadoop好友推荐系统-去重后的数据存入数据库
- Hadoop好友推荐系统-组别数据入库
- Hadoop好友推荐系统-HDFS的文件上传和下载
- Hadoop好友推荐系统-推荐结果查询
- Hadoop好友推荐系统-数据表的初始化
- Hadoop好友推荐系统-用户距离计算
- Hadoop好友推荐系统-寻找最佳DC
- Hadoop好友推荐系统-画出决策图
- Hadoop好友推荐系统-执行分类算法
- 基于Hadoop的好友推荐系统项目综述
- Hadoop好友推荐系统-执行聚类算法
- Hadoop好友推荐系统-寻找聚类中心
- Hadoop/Spark推荐系统(一)——共同好友
- Hadoop Sqoop;从HDFS导入数据到MYSQL数据库中出现中文字符乱码
- Hadoop/MapReduce 好友推荐解决方案
- 传统数据库同步数据到HDFS
- linux hadoop mount 加载HDFS到本地文件系统
- 接口+GUI-第十天
- SGU 326 Perspective ( 网络流 )
- Kotlin Android 扩展(二)
- Vue+nginx
- TF-IDF概念简介
- Hadoop好友推荐系统-数据库过滤数据到HDFS
- jq 属性选择器动态属性值 和v-for 中嵌套v-for
- 达人篇:2)质量的小误会
- redis cli命令
- 如何在阿里云上安装JDK、Tomcat以及其配置过程
- Junit测试出现异常:Exception in thread "main" java.lang.NoSuchMethodError: org.junit.platform.commons.util.
- 命令行操作oracle,显示英文而不是中文
- MySQL优化(连接优化和缓存优化)
- Android Framework启动流程分析