我一直在与Mahout合作,根据以下数据创建推荐引擎:
我在Tomcat上使用以下JVM参数运行它:
-Xms1024M -Xmx1024M -da -dsa -XX:NewRatio=9 -server
建议花了大约6s,似乎很慢!我怎样才能改善Mahout表演?
我正在使用以下代码:
此部分在启动时运行一次:
JDBCDataModel jdbcdatamodel = new MySQLJDBCDataModel(dataSource);
dataModel = new ReloadFromJDBCDataModel(jdbcdatamodel);
ItemSimilarity similarity = new CachingItemSimilarity(new EuclideanDistanceSimilarity(model), model);
SamplingCandidateItemsStrategy strategy = new SamplingCandidateItemsStrategy(10, 5);
recommender = new CachingRecommender(new GenericItemBasedRecommender(model, similarity, strategy, strategy));
并且,对于我做的每个用户请求:
recommender.recommend(userId, howMany);
答案 0 :(得分:1)
我建议采用不同的方法。使用夜间作业,预先计算所有用户的推荐,并将结果每晚加载到MySQL表中。这将使得推荐仅仅是一个简单的数据库调用。
由于您有10K项目,因此计算单个用户mahout的建议必须在内部乘以(10k x 10K)矩阵与另一个(10K X 1)矩阵。考虑到尺寸,6秒似乎相当快。 Reference
现在,如果您在hadoop和AWS EMR上使用RecommenderJob,则需要〜<10分钟来处理您的规模上的数据。或者,您可以通过简单地使用循环并按顺序为所有用户预先计算,以非分布式方式执行相同的工作。不利的一面是,您的建议总是落后1天或6小时或您选择工作的频率。