@Override public void execute(Vertex vertex, Messenger<Integer> messenger, Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(DEG_MSG, 1); } else { int degree = IteratorUtils.stream(messenger.receiveMessages()).reduce(0, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, DEGREE, degree); if (memory.getIteration()<length) messenger.sendMessage(DEG_MSG, degree); } }
@Override public void execute(final Vertex vertex, Messenger<Long> messenger, final Memory memory) { if (memory.isInitialIteration()) { if (vertex.id().equals(Long.valueOf(seed).longValue())) { // The seed sends a single message to start the computation log.debug("Sent initial message from {}", vertex.id()); // The seed's distance to itself is zero vertex.property(VertexProperty.Cardinality.single, DISTANCE, 0L); messenger.sendMessage(incidentMessageScope, 0L); } } else { Iterator<Long> distances = messenger.receiveMessages(); // Find minimum distance among all incoming messages, or null if no messages came in Long shortestDistanceSeenOnThisIteration = IteratorUtils.stream(distances).reduce((a, b) -> Math.min(a, b)).orElse(null); if (null == shortestDistanceSeenOnThisIteration) return; // no messages to process or forward on this superstep VertexProperty<Long> currentShortestVP = vertex.property(DISTANCE); if (!currentShortestVP.isPresent() || currentShortestVP.value() > shortestDistanceSeenOnThisIteration) { // First/shortest distance seen by this vertex: store it and forward to neighbors vertex.property(VertexProperty.Cardinality.single, DISTANCE, shortestDistanceSeenOnThisIteration); messenger.sendMessage(incidentMessageScope, shortestDistanceSeenOnThisIteration); } // else: no new winner, ergo no reason to send message to neighbors } }
@Override public void execute(Vertex vertex, Messenger<Double> messenger, Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(inE, 1D); } else if (1 == memory.getIteration()) { double initialPageRank = 1D / vertexCount; double edgeCount = IteratorUtils.stream(messenger.receiveMessages()).reduce(0D, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, PAGE_RANK, initialPageRank); vertex.property(VertexProperty.Cardinality.single, OUTGOING_EDGE_COUNT, edgeCount); messenger.sendMessage(outE, initialPageRank / edgeCount); } else { double newPageRank = IteratorUtils.stream(messenger.receiveMessages()).reduce(0D, (a, b) -> a + b); newPageRank = (dampingFactor * newPageRank) + ((1D - dampingFactor) / vertexCount); vertex.property(VertexProperty.Cardinality.single, PAGE_RANK, newPageRank); messenger.sendMessage(outE, newPageRank / vertex.<Double>value(OUTGOING_EDGE_COUNT)); } }
@Override public void execute(Vertex vertex, Messenger<Integer> messenger, Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(DEG_MSG, 1); } else { int degree = IteratorUtils.stream(messenger.receiveMessages()).reduce(0, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, DEGREE, degree); if (memory.getIteration()<length) messenger.sendMessage(DEG_MSG, degree); } }
@Override public void execute(Vertex vertex, Messenger<Double> messenger, Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(inE, 1D); } else if (1 == memory.getIteration()) { double initialPageRank = 1D / vertexCount; double edgeCount = IteratorUtils.stream(messenger.receiveMessages()).reduce(0D, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, PAGE_RANK, initialPageRank); vertex.property(VertexProperty.Cardinality.single, OUTGOING_EDGE_COUNT, edgeCount); messenger.sendMessage(outE, initialPageRank / edgeCount); } else { double newPageRank = IteratorUtils.stream(messenger.receiveMessages()).reduce(0D, (a, b) -> a + b); newPageRank = (dampingFactor * newPageRank) + ((1D - dampingFactor) / vertexCount); vertex.property(VertexProperty.Cardinality.single, PAGE_RANK, newPageRank); messenger.sendMessage(outE, newPageRank / vertex.<Double>value(OUTGOING_EDGE_COUNT)); } }
@Override public void execute(final Vertex vertex, Messenger<Long> messenger, final Memory memory) { if (memory.isInitialIteration()) { if (vertex.id().equals(seed)) { // The seed sends a single message to start the computation log.debug("Sent initial message from {}", vertex.id()); // The seed's distance to itself is zero vertex.property(VertexProperty.Cardinality.single, DISTANCE, 0L); messenger.sendMessage(incidentMessageScope, 0L); } } else { Iterator<Long> distances = messenger.receiveMessages(); // Find minimum distance among all incoming messages, or null if no messages came in Long shortestDistanceSeenOnThisIteration = IteratorUtils.stream(distances).reduce(Math::min).orElse(null); if (null == shortestDistanceSeenOnThisIteration) return; // no messages to process or forward on this superstep VertexProperty<Long> currentShortestVP = vertex.property(DISTANCE); if (!currentShortestVP.isPresent() || currentShortestVP.value() > shortestDistanceSeenOnThisIteration) { // First/shortest distance seen by this vertex: store it and forward to neighbors vertex.property(VertexProperty.Cardinality.single, DISTANCE, shortestDistanceSeenOnThisIteration); messenger.sendMessage(incidentMessageScope, shortestDistanceSeenOnThisIteration); } // else: no new winner, ergo no reason to send message to neighbors } }
@Override public void execute(final Vertex vertex, final Messenger<String> messenger, final Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(this.messageScope, vertex.value(PROPERTY_IN).toString()); } else { final char[] composite = IteratorUtils.reduce(messenger.receiveMessages(), "", (a, b) -> a + b).toCharArray(); Arrays.sort(composite); vertex.property(PROPERTY_OUT, new String(composite)); } }
@Override public void execute(Vertex vertex, Messenger<Long> messenger, Memory memory) { switch (memory.getIteration()) { case 0: if (vertex.value("name").equals("josh")) { messenger.sendMessage(this.countMessageScopeIn, 2L); messenger.sendMessage(this.countMessageScopeOut, 1L); } break; case 1: long edgeCount = IteratorUtils.reduce(messenger.receiveMessages(), 0L, (a, b) -> a + b); vertex.property(MEMORY_KEY, edgeCount); break; } }
@Override public void execute(Vertex vertex, Messenger<Long> messenger, Memory memory) { switch (memory.getIteration()) { case 0: if (vertex.value("name").equals("josh")) { messenger.sendMessage(this.countMessageScopeIn, 2L); messenger.sendMessage(this.countMessageScopeOut, 1L); } break; case 1: long edgeCount = IteratorUtils.reduce(messenger.receiveMessages(), 0L, (a, b) -> a + b); vertex.property(MEMORY_KEY, edgeCount); break; } }
final Iterator<String> componentIterator = messenger.receiveMessages(); while(componentIterator.hasNext()) { final String candidateComponent = componentIterator.next();
final Iterator<Triplet<Path, Edge, Number>> iterator = messenger.receiveMessages();
double pageRank; if (1 == memory.getIteration()) { edgeCount = IteratorUtils.reduce(messenger.receiveMessages(), 0.0d, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, EDGE_COUNT, edgeCount); pageRank = null == this.initialRankTraversal ? } else { edgeCount = vertex.value(EDGE_COUNT); pageRank = IteratorUtils.reduce(messenger.receiveMessages(), 0.0d, (a, b) -> a + b);
1.0d : TraversalUtil.apply(vertex, this.initialVoteStrengthTraversal.get()).doubleValue()) / IteratorUtils.reduce(IteratorUtils.map(messenger.receiveMessages(), Pair::getValue1), 0.0d, (a, b) -> a + b); vertex.property(VertexProperty.Cardinality.single, this.property, vertex.id()); vertex.property(VertexProperty.Cardinality.single, VOTE_STRENGTH, voteStrength); final Map<Serializable, Double> votes = new HashMap<>(); votes.put(vertex.value(this.property), vertex.<Double>value(VOTE_STRENGTH)); messenger.receiveMessages().forEachRemaining(message -> MapHelper.incr(votes, message.getValue0(), message.getValue1())); Serializable cluster = PeerPressureVertexProgram.largestCount(votes); if (null == cluster) cluster = (Serializable) vertex.id();
final Iterator<Tuple> idi = messenger.receiveMessages(); while (idi.hasNext()) { final Tuple idPair = idi.next();
final Iterator<TraverserSet<Object>> messages = messenger.receiveMessages(); while (messages.hasNext()) { IteratorUtils.removeOnNext(messages.next().iterator()).forEachRemaining(traverser -> {
private static int getMessageCountExcludeSelf(Messenger<String> messenger, String id) { Set<String> messageSet = newHashSet(messenger.receiveMessages()); messageSet.remove(id); return messageSet.size(); }
static long getMessageCount(Messenger<Long> messenger) { return IteratorUtils.reduce(messenger.receiveMessages(), 0L, (a, b) -> a + b); } }
private void degreeMessageCounting(Messenger<Long> messenger, Vertex vertex) { if (messenger.receiveMessages().hasNext() && (ofLabelIds.isEmpty() || vertexHasSelectedTypeId(vertex, ofLabelIds))) { vertex.property(DEGREE, getMessageCount(messenger)); } } }
private static void updateClusterLabel(Vertex vertex, Messenger<String> messenger, Memory memory) { String currentMax = vertex.value(K_CORE_LABEL); String max = IteratorUtils.reduce(messenger.receiveMessages(), currentMax, (a, b) -> a.compareTo(b) > 0 ? a : b); if (!max.equals(currentMax)) { LOGGER.trace("Cluster label of " + vertex + " changed from " + currentMax + " to " + max); vertex.property(K_CORE_LABEL, max); sendMessage(messenger, max); memory.add(VOTE_TO_HALT, false); } else { LOGGER.trace("Cluster label of " + vertex + " is still " + currentMax); } }
@Override public void execute(final Vertex vertex, final Messenger<String> messenger, final Memory memory) { if (memory.isInitialIteration()) { messenger.sendMessage(this.messageScope, vertex.value(PROPERTY_IN).toString()); } else { final char[] composite = IteratorUtils.reduce(messenger.receiveMessages(), "", (a, b) -> a + b).toCharArray(); Arrays.sort(composite); vertex.property(PROPERTY_OUT, new String(composite)); } }