mahout算法源码分析之Collaborative Filtering with ALS-WR (二)splitDataset 和parallelALS
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit。
接上篇,此篇blog分析第(1)、(2)对应的java源码,主要是splitDataset和parallelALS。
(一)其中splitDataset对应的mahout中的源java文件是:org.apache.mahout.cf.taste.hadoop.als.DatasetSplitter.java 文件,打开这个文件,可以看到这个类是继承了AbstractJob的,所以需要覆写其run方法。run方法中含有所有的操作。
进入run方法,看到刚开始和之前的算法分析一样,都是参数的获取。然后,新建了3个job,分别是:
public synchronized void addDatum(double datum) { if (++count == 1) { average = datum; } else { average = average * (count - 1) / count + datum / count; } }可以看到addDatum方法就是算平均值的。然后就是reducer了,reducer还是那个MergeVectorReducer,那么reducer的输出就应该是<key,value> --> <0,[itemID:averageRating,itemID:averageRating,...]>。
接下里就是initializeM和for循环了,今天又晚了。总感觉假期效率低的没法说。。。
分享,成长,快乐
转载请注明blog地址:http://blog.csdn.net/fansy1990