List of usage examples for org.apache.hadoop.io IntWritable compareTo
@Override public int compareTo(IntWritable o)
From source file:it.uniroma1.bdc.tesi.piccioli.giraphstandalone.trianglecount.intwritable.TriangleCountPlusPlus.java
License:Apache License
@Override public void compute(Vertex<IntWritable, IntWritable, NullWritable> vertex, Iterable<MessageIntIdIntValue> messages) throws IOException { Iterable<Edge<IntWritable, NullWritable>> edges = vertex.getEdges(); if (getSuperstep() == 0) { //calcolo degree e invio a vertici vicini IntWritable degree = new IntWritable(vertex.getNumEdges()); vertex.setValue(degree);// ww w .ja va 2s . co m for (Edge<IntWritable, NullWritable> edge : edges) { this.sendMessage(edge.getTargetVertexId(), new MessageIntIdIntValue(vertex.getId(), degree)); } } else if (getSuperstep() == 1) { //Ricevo Degree dai nodi vicini, elimino edge che collegano nodi "< degree minori" IntWritable vertexId = vertex.getId(); IntWritable vertexValue = vertex.getValue(); IntWritable messageId; IntWritable messageValue; for (MessageIntIdIntValue message : messages) { messageValue = message.getValue(); messageId = message.getId(); if ((messageValue.compareTo(vertexValue) < 0) || ((messageValue.compareTo(vertexValue) == 0) && (messageId.compareTo(vertexId) < 0))) { this.removeEdgesRequest(messageId, vertexId); } } } else if (getSuperstep() == 2) { //triangle count for (Edge<IntWritable, NullWritable> edge : edges) { this.sendMessageToAllEdges(vertex, new MessageIntIdIntValue(edge.getTargetVertexId(), new IntWritable())); } } else if (getSuperstep() == 3) { Integer T = 0; Set<Integer> edgeMap = Sets.<Integer>newHashSet(); for (Edge<IntWritable, NullWritable> edge : edges) { edgeMap.add(edge.getTargetVertexId().get()); } for (MessageIntIdIntValue message : messages) { if (edgeMap.contains(message.getId().get())) { T++; } } vertex.setValue(new IntWritable(T)); aggregate(SOMMA + getSuperstep(), new LongWritable(T)); vertex.voteToHalt(); } }
From source file:it.uniroma1.bdc.tesi.piccioli.giraphstandalone.trianglecount.intwritable.TriangleCountPlusPlusPhase1.java
License:Apache License
/** Prima fase composta da i primi 2 superstep * 1 superstep - calcolo del degree di ogni nodo e invio info a nodi vicino * 2 superstep - elimino archi fuori ordinamento * /*from www . j av a 2 s. c o m*/ * @param vertex * @param messages * @throws java.io.IOException **/ @Override public void compute(Vertex<IntWritable, IntWritable, NullWritable> vertex, Iterable<MessageIntIdIntValue> messages) throws IOException { Iterable<Edge<IntWritable, NullWritable>> edges = vertex.getEdges(); if (getSuperstep() == 0) { //calcolo degree e invio a vertici vicini IntWritable degree = new IntWritable(vertex.getNumEdges()); vertex.setValue(degree); for (Edge<IntWritable, NullWritable> edge : edges) { this.sendMessage(edge.getTargetVertexId(), new MessageIntIdIntValue(vertex.getId(), degree)); } } else if (getSuperstep() == 1) { //Ricevo Degree dai nodi vicini, elimino edge che collegano nodi "< degree minori" IntWritable vertexId = vertex.getId(); IntWritable vertexValue = vertex.getValue(); IntWritable messageId; IntWritable messageValue; for (MessageIntIdIntValue message : messages) { messageValue = message.getValue(); messageId = message.getId(); if ((messageValue.compareTo(vertexValue) < 0) || ((messageValue.compareTo(vertexValue) == 0) && (messageId.compareTo(vertexId) < 0))) { this.removeEdgesRequest(messageId, vertexId); } } } }
From source file:org.apache.giraph.block_app.library.algo.MultiSeedBreadthFirstSearchBlockFactory.java
License:Apache License
private static TripleFunction<Vertex<LongWritable, MultiSeedBreadthFirstSearchVertexValue, Writable>, IntWritable, Iterator<IntWritable>, IntWritable> traverseVertex() { IntWritable notReachableVertex = new IntWritable(-1); IntWritable vertexValue = new IntWritable(); IntWritable reservoirValue = new IntWritable(); TransientRandom random = new TransientRandom(); IntWritable reusableMessage = new IntWritable(); // Reservoir sampling to select the seed from the set of messages received return (vertex, distance, messageIter) -> { vertexValue.set(vertex.getValue().getDistance()); if (vertexValue.compareTo(notReachableVertex) == 0 || vertexValue.compareTo(distance) > 0) { reservoirValue.set(messageIter.next().get()); int messageIndex = 1; while (messageIter.hasNext()) { if (random.nextInt(messageIndex + 1) < 1) { reservoirValue.set(messageIter.next().get()); } else { messageIter.next();/* ww w.j a v a 2 s. co m*/ } messageIndex++; } vertex.getValue().setSourceIndex(reservoirValue.get()); vertex.getValue().setDistance(distance.get()); reusableMessage.set(vertex.getValue().getSourceIndex()); return reusableMessage; } else { return null; } }; }