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);

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

  • 相关阅读:
    Linux信号列表(zz)
    TCP状态转移图学习总结
    UNP学习笔记之四select和poll
    RSS2.0结构
    UNP学习笔记二简单的并发服务器(concurrent servers)
    js面向对象基础(zz)
    libevent introduction
    Linux下Makefile的automake生成全攻略(zz)
    UNP学习笔记之三POSIX Signal Handling
    关于网络编程(服务端)的一些笔记(zz)
  • 原文地址:https://www.cnblogs.com/bowenlearning/p/3762009.html
Copyright © 2011-2022 走看看