Java 基于项目的协同过滤算法利用mahout计算项目间的相似度

Java 基于项目的协同过滤算法利用mahout计算项目间的相似度,java,hadoop,mahout,Java,Hadoop,Mahout,我一直在使用这个代码,但我得到了一个错误 Exception in thread "main" java.util.NoSuchElementException at com.google.common.base.AbstractIterator.next(AbstractIterator.java:75) at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processLine(FileDataModel.j

我一直在使用这个代码,但我得到了一个错误

Exception in thread "main" java.util.NoSuchElementException
    at com.google.common.base.AbstractIterator.next(AbstractIterator.java:75)
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processLine(FileDataModel.java:385)
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processFile(FileDataModel.java:340)
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.buildModel(FileDataModel.java:239)
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.reload(FileDataModel.java:208)
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:194)
    at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:149)
    at ItemRecommender.main(ItemRecommender.java:22) 
线程“main”java.util.NoSuchElementException中的异常 位于com.google.common.base.AbstractIterator.next(AbstractIterator.java:75) 位于org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processLine(FileDataModel.java:385) 位于org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processFile(FileDataModel.java:340) 位于org.apache.mahout.cf.taste.impl.model.file.FileDataModel.buildModel(FileDataModel.java:239) 位于org.apache.mahout.cf.taste.impl.model.file.FileDataModel.reload(FileDataModel.java:208) 位于org.apache.mahout.cf.taste.impl.model.file.FileDataModel.(FileDataModel.java:194) 位于org.apache.mahout.cf.taste.impl.model.file.FileDataModel.(FileDataModel.java:149) 在ItemRecommender.main(ItemRecommender.java:22) 是否有一些jar文件错误,我需要导入或…帮助我被卡住了…代码如下

import java.io.File;
import java.util.List;
import java.io.IOException;
import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;

public class ItemRecommender {


public static void main(String[] args) {

    try{

    DataModel dm = new FileDataModel(new File("data/movies.csv"));


    ItemSimilarity sim = new LogLikelihoodSimilarity(dm);


    GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dm, sim);

    int x=1;

    for(LongPrimitiveIterator items = dm.getItemIDs(); items.hasNext();){
        long itemId = items.nextLong();
        List<RecommendedItem> recommendations = recommender.mostSimilarItems(itemId, 5);

        for(RecommendedItem recommendation : recommendations){
            System.out.println(itemId + "," + recommendation.getItemID() + "," + recommendation.getValue());

        }
        x++;
        //if(x>10) System.exit(1);

    }

    }catch(IOException e)
{ System.out.println("There was an error.");
    e.printStackTrace();
} catch(TasteException e) 
{
    System.out.println("There was a taste exception.");
    e.printStackTrace();
}
导入java.io.File;
导入java.util.List;
导入java.io.IOException;
导入org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
导入org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
导入org.apache.mahout.cf.taste.impl.similarity.LogLikelihoodSimilarity;
导入org.apache.mahout.cf.taste.recommender.RecommendeItem;
导入org.apache.mahout.cf.taste.similarity.ItemSimilarity;
公共类项目推荐器{
公共静态void main(字符串[]args){
试一试{
DataModel dm=新文件DataModel(新文件(“data/movies.csv”);
ItemSimilarity sim=新的对数相似性(dm);
GenericItemBasedRecommender推荐人=新的GenericItemBasedRecommender(dm,sim);
int x=1;
for(LongPrimitiveIterator items=dm.getItemId();items.hasNext();){
long itemId=items.nextLong();
列表建议=推荐人。最相似项(itemId,5);
对于(建议编辑EM建议:建议){
System.out.println(itemId+“,“+建议.getItemID()+”,“+建议.getValue());
}
x++;
//如果(x>10)系统退出(1);
}
}捕获(IOE异常)
{System.out.println(“发生错误”);
e、 printStackTrace();
}捕获(味觉异常e)
{
System.out.println(“有一个味道异常”);
e、 printStackTrace();
}
} }

Mahout“taste”框架已被弃用,不久将被删除。最好在此处查看项目相似性的新版本:

顺便说一句,这里有一个完全实现的带有事件摄取和服务层的推荐程序: