zoukankan      html  css  js  c++  java
  • 电影数据集的处理

         最近将movielens数据集rate.dat原来格式:userid,itemid,rating,timestamp按要求转换为(userid,item1,item2....),按时间的前后展示用户的所以观看电影记录。我是首先将数据导入到mysql数据库,利用数据库的容易对数据排序的特点,将其按时间字段进行排序,将排序的查询结果导出到本地文件,

     select userID,movieID,timestamp into outfile1 '/var/lib/mysql/outfile.txt' from movie_jieguo2  order by userID,timestamp;

    1 168 874965478
    1 172 874965478
    1 165 874965518
    1 156 874965556
    1 166 874965677

    接下来,考虑将每一个用户的观看电影记录连接起来,运用java的hashmap进行处理

    public static void main(String[] args) {
            String line=null;
            StringBuilder sb=new StringBuilder();
            Map<String,String> movie_time = new HashMap<String, String>();
        try {
            
            LineNumberReader lineReader = new LineNumberReader(new FileReader("/home/grid/outfile1.txt"));
            
            while ((line = lineReader.readLine()) != null) {
                String[] ra = line.split("	");
                String userID=ra[0];
                String itemID=ra[1];
                
                if(movie_time.containsKey(userID)){
                    sb.append(itemID+" ");
                    movie_time.put(userID,sb.toString());
                }
                else{
                    sb.delete( 0, sb.length() );
                    sb.append(itemID+" ");
                    movie_time.put(userID,sb.toString());
                    
                }
            
            }
            
        }
        catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();}

    学到了StringBuilder清空的方法:sb.delete( 0, sb.length() );网上的一些帖子认为该清空方法最有效,开始一直傻B地用null来清空,结果一直报空指针错误,弄了很久,没找到原因。

    最后用遍历hashmap将输出重定向到本地文本文件中:

    遍历hashmap网上帖子推荐方法:

    Iterator iter = movie_time.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            String key = entry.getKey().toString();
            String val = entry.getValue().toString();
            System.out.println(key+"    "+val);

    个人感觉这样处理有些麻烦,无奈编程技术有限,只想到了这样一个烂办法,往后还需要加强学习!

  • 相关阅读:
    nodejs关于前后端图片上传的思路及实现代码
    vue项目better-scroll使用注意点
    nuxt.js的使用和开发,一款vue基于服务器SSR渲染工具
    vue-cli3.0中自定css、js和图片的打包路径
    Vue.js watch监视属性
    React Developers的10个超实用神奇工具
    Vue 3.0 体验 Vue Function API
    Dojo Store 概念详解
    React Native 实现城市选择组件
    java 环境变量 设置 问题
  • 原文地址:https://www.cnblogs.com/bowenlearning/p/3762009.html
Copyright © 2011-2022 走看看