@Override protected boolean lessThan(SimilarItem one, SimilarItem two) { return one.getSimilarity() < two.getSimilarity(); }
@Override protected boolean lessThan(SimilarItem one, SimilarItem two) { return one.getSimilarity() < two.getSimilarity(); }
@Override protected boolean lessThan(SimilarItem one, SimilarItem two) { return one.getSimilarity() < two.getSimilarity(); }
@Override public void add(SimilarItems similarItems) throws IOException { String itemID = String.valueOf(similarItems.getItemID()); for (SimilarItem similarItem : similarItems.getSimilarItems()) { writer.write(itemID); writer.write(','); writer.write(String.valueOf(similarItem.getItemID())); writer.write(','); writer.write(String.valueOf(similarItem.getSimilarity())); writer.newLine(); } }
@Override public void add(SimilarItems similarItems) throws IOException { String itemID = String.valueOf(similarItems.getItemID()); for (SimilarItem similarItem : similarItems.getSimilarItems()) { writer.write(itemID); writer.write(','); writer.write(String.valueOf(similarItem.getItemID())); writer.write(','); writer.write(String.valueOf(similarItem.getSimilarity())); writer.newLine(); } }
@Override public void add(SimilarItems similarItems) throws IOException { String itemID = String.valueOf(similarItems.getItemID()); for (SimilarItem similarItem : similarItems.getSimilarItems()) { writer.write(itemID); writer.write(','); writer.write(String.valueOf(similarItem.getItemID())); writer.write(','); writer.write(String.valueOf(similarItem.getSimilarity())); writer.newLine(); } }
@Override protected void map(IntWritable itemIDIndexWritable, VectorWritable similarityVector, Context ctx) throws IOException, InterruptedException { int itemIDIndex = itemIDIndexWritable.get(); TopSimilarItemsQueue topKMostSimilarItems = new TopSimilarItemsQueue(maxSimilarItemsPerItem); for (Vector.Element element : similarityVector.get().nonZeroes()) { SimilarItem top = topKMostSimilarItems.top(); double candidateSimilarity = element.get(); if (candidateSimilarity > top.getSimilarity()) { top.set(indexItemIDMap.get(element.index()), candidateSimilarity); topKMostSimilarItems.updateTop(); } } long itemID = indexItemIDMap.get(itemIDIndex); for (SimilarItem similarItem : topKMostSimilarItems.getTopItems()) { long otherItemID = similarItem.getItemID(); if (itemID < otherItemID) { ctx.write(new EntityEntityWritable(itemID, otherItemID), new DoubleWritable(similarItem.getSimilarity())); } else { ctx.write(new EntityEntityWritable(otherItemID, itemID), new DoubleWritable(similarItem.getSimilarity())); } } } }
@Override protected void map(IntWritable itemIDIndexWritable, VectorWritable similarityVector, Context ctx) throws IOException, InterruptedException { int itemIDIndex = itemIDIndexWritable.get(); TopSimilarItemsQueue topKMostSimilarItems = new TopSimilarItemsQueue(maxSimilarItemsPerItem); for (Vector.Element element : similarityVector.get().nonZeroes()) { SimilarItem top = topKMostSimilarItems.top(); double candidateSimilarity = element.get(); if (candidateSimilarity > top.getSimilarity()) { top.set(indexItemIDMap.get(element.index()), candidateSimilarity); topKMostSimilarItems.updateTop(); } } long itemID = indexItemIDMap.get(itemIDIndex); for (SimilarItem similarItem : topKMostSimilarItems.getTopItems()) { long otherItemID = similarItem.getItemID(); if (itemID < otherItemID) { ctx.write(new EntityEntityWritable(itemID, otherItemID), new DoubleWritable(similarItem.getSimilarity())); } else { ctx.write(new EntityEntityWritable(otherItemID, itemID), new DoubleWritable(similarItem.getSimilarity())); } } } }
@Override protected void map(IntWritable itemIDIndexWritable, VectorWritable similarityVector, Context ctx) throws IOException, InterruptedException { int itemIDIndex = itemIDIndexWritable.get(); TopSimilarItemsQueue topKMostSimilarItems = new TopSimilarItemsQueue(maxSimilarItemsPerItem); for (Vector.Element element : similarityVector.get().nonZeroes()) { SimilarItem top = topKMostSimilarItems.top(); double candidateSimilarity = element.get(); if (candidateSimilarity > top.getSimilarity()) { top.set(indexItemIDMap.get(element.index()), candidateSimilarity); topKMostSimilarItems.updateTop(); } } long itemID = indexItemIDMap.get(itemIDIndex); for (SimilarItem similarItem : topKMostSimilarItems.getTopItems()) { long otherItemID = similarItem.getItemID(); if (itemID < otherItemID) { ctx.write(new EntityEntityWritable(itemID, otherItemID), new DoubleWritable(similarItem.getSimilarity())); } else { ctx.write(new EntityEntityWritable(otherItemID, itemID), new DoubleWritable(similarItem.getSimilarity())); } } } }