以下是使用mahout的用户推荐的代码。
DataModel dm = new FileDataModel(new File(inputFile));
UserSimilarity sim = new LogLikelihoodSimilarity(dm);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(100, sim,
dm);
GenericUserBasedRecommender recommender = new GenericUserBasedRecommender(
dm, neighborhood, sim);
生成建议后,我正在尝试将其写入文件,如下所示:
FileWriter writer = new FileWriter(outputFile);
for (LongPrimitiveIterator userIterator = dm.getItemIDs(); userIterator.hasNext();) {
long user = (long) userIterator.next();
List<RecommendedItem> recs = recommender.recommend(user, numOfRec );
for (RecommendedItem item : recs) {
writer.write(user + "," + item.getItemID() + ","
+ item.getValue()+"\n");
}
}
writer.close();
这段代码 - 写入文件,花费了大量时间。我怎样才能加快写操作?
答案 0 :(得分:0)
我发现您可以做出一些潜在的改进:
使用BufferedWriter而不是普通编写器。它应该可以保护你大约30%的东西,但只是在简单的写作时间。对于100k线路,它应该在几百ms左右。
Writer writer = new BufferedWriter(new FileWriter(outputFile));
在两个单独的线程中写入建议处理和写入文件,而不必等待另一个线程。
扩展第2点,您可以尝试将推荐处理打包到ThreadPoolExecutor
。现在你的代码只是一个线程,而且大多数当前的处理器拥有的核心数量远多于可用于此的核心。如果您需要更多信息,请告诉我。