@Override public boolean contains(long k) { return containsKey(k); } @Override
@Override public boolean hasMessagesForVertex(LongWritable vertexId) { return getPartitionMap(vertexId).containsKey(vertexId.get()); }
@Override public void setEdgeValue(LongWritable targetVertexId, DoubleWritable edgeValue) { if (edgeMap.containsKey(targetVertexId.get())) { edgeMap.put(targetVertexId.get(), edgeValue.get()); } }
@Override public DoubleWritable getEdgeValue(LongWritable targetVertexId) { if (!edgeMap.containsKey(targetVertexId.get())) { return null; } if (representativeEdgeValue == null) { representativeEdgeValue = new DoubleWritable(); } representativeEdgeValue.set(edgeMap.get(targetVertexId.get())); return representativeEdgeValue; }
@Override public Iterable<DoubleWritable> getVertexMessages( LongWritable vertexId) { Long2DoubleOpenHashMap partitionMap = getPartitionMap(vertexId); if (!partitionMap.containsKey(vertexId.get())) { return EmptyIterable.get(); } else { return Collections.singleton( new DoubleWritable(partitionMap.get(vertexId.get()))); } }
@Override public void addPartitionMessages(int partitionId, VertexIdMessages<LongWritable, DoubleWritable> messages) { LongWritable reusableVertexId = new LongWritable(); DoubleWritable reusableMessage = new DoubleWritable(); DoubleWritable reusableCurrentMessage = new DoubleWritable(); Long2DoubleOpenHashMap partitionMap = map.get(partitionId); synchronized (partitionMap) { VertexIdMessageIterator<LongWritable, DoubleWritable> iterator = messages.getVertexIdMessageIterator(); while (iterator.hasNext()) { iterator.next(); long vertexId = iterator.getCurrentVertexId().get(); double message = iterator.getCurrentMessage().get(); if (partitionMap.containsKey(vertexId)) { reusableVertexId.set(vertexId); reusableMessage.set(message); reusableCurrentMessage.set(partitionMap.get(vertexId)); messageCombiner.combine(reusableVertexId, reusableCurrentMessage, reusableMessage); message = reusableCurrentMessage.get(); } partitionMap.put(vertexId, message); } } }