Example usage for org.apache.hadoop.io IntWritable compareTo

List of usage examples for org.apache.hadoop.io IntWritable compareTo

Introduction

In this page you can find the example usage for org.apache.hadoop.io IntWritable compareTo.

Prototype

@Override
public int compareTo(IntWritable o) 

Source Link

Document

Compares two IntWritables.

Usage

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;
        }
    };
}