如何加快程序执行速度?

时间:2015-11-09 12:46:30

标签: java apache file mahout mahout-recommender

以下是使用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();

这段代码 - 写入文件,花费了大量时间。我怎样才能加快写操作?

1 个答案:

答案 0 :(得分:0)

我发现您可以做出一些潜在的改进:

  1. 使用BufferedWriter而不是普通编写器。它应该可以保护你大约30%的东西,但只是在简单的写作时间。对于100k线路,它应该在几百ms左右。

    Writer writer = new BufferedWriter(new FileWriter(outputFile));
    
  2. 在两个单独的线程中写入建议处理和写入文件,而不必等待另一个线程。

  3. 扩展第2点,您可以尝试将推荐处理打包到ThreadPoolExecutor。现在你的代码只是一个线程,而且大多数当前的处理器拥有的核心数量远多于可用于此的核心。如果您需要更多信息,请告诉我。