您的位置:首页 > 其它

电影数据集的处理

2014-05-31 00:33 148 查看
最近将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("\t");
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);


个人感觉这样处理有些麻烦,无奈编程技术有限,只想到了这样一个烂办法,往后还需要加强学习!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: