Example usage for org.apache.hadoop.io DoubleWritable get

List of usage examples for org.apache.hadoop.io DoubleWritable get

Introduction

In this page you can find the example usage for org.apache.hadoop.io DoubleWritable get.

Prototype

public double get() 

Source Link

Usage

From source file:org.apache.giraph.block_app.library.pagerank.PageRankIteration.java

License:Apache License

@Override
public VertexSender<I, V, E> getVertexSender(final BlockWorkerSendApi<I, V, E, DoubleWritable> workerApi,
        Object executionStage) {/*from  w w w  .ja  va 2s .  c  om*/
    final DoubleWritable message = new DoubleWritable();
    return vertex -> {
        DoubleWritable newValue = valueTransfer.get();
        // Update stats
        if (newValue != null) {
            DoubleWritable oldValue = valueGetter.get(vertex);
            double diff = Math.abs(oldValue.get() - newValue.get());
            reduceDouble(superstepErrorSum, diff);
            reduceDouble(superstepErrorMax, diff);

            reduceDouble(superstepErrorRMSESum, diff * diff);
            if (oldValue.get() > 0) {
                reduceDouble(superstepRelativeErrorSum, diff / oldValue.get());
                reduceDouble(superstepRelativeErrorMax, diff / oldValue.get());
            }
            valueSetter.apply(vertex, newValue);
            reduceLong(verticesModified, 1);
        }

        // Send pagerank value to neighbors, or update sink sum
        DoubleWritable value = valueGetter.get(vertex);
        superstepPageRankAll.reduce(value);
        if (vertex.getNumEdges() == 0) { // sink vertex
            superstepPageRankSinks.reduce(value);
        } else { // not a sink
            if (value.get() > 0) {
                if (edgeValueGetter.allVertexEdgesTheSame()) {
                    message.set(value.get() * edgeValueGetter.getEdgeValue(vertex, null));
                    workerApi.sendMessageToAllEdges(vertex, message);
                } else {
                    for (Edge<I, E> edge : vertex.getEdges()) {
                        message.set(value.get() * edgeValueGetter.getEdgeValue(vertex, edge.getValue()));
                        workerApi.sendMessage(edge.getTargetVertexId(), message);
                    }
                }
            }
        }
    };
}

From source file:org.apache.giraph.block_app.library.pagerank.PageRankIteration.java

License:Apache License

/**
 * Calculates the new value of pagerank at a vertex
 *
 * @param messages Messages//  w  ww. j  a v  a 2 s  .co m
 * @return new value or change
 */
protected double calculateNewValue(long totalVertices, double sinkSum, double allSum,
        Iterable<DoubleWritable> messages) {
    double sum = 0.0;
    for (DoubleWritable message : messages) {
        sum += message.get();
    }
    // Every vertex also receives equal fraction of pagerank value from sinks
    sum += sinkSum / totalVertices;
    return dampingFactor * sum + (1.0 - dampingFactor) * allSum / totalVertices;
}

From source file:org.apache.giraph.classifier.lp.GFHF.java

License:Apache License

@Override
public void compute(Iterator<DoubleArrayWritable> msgIterator) {
    MulticlassClassifierWritable vertexValue = getVertexValue();

    Long maxIteration = getMaxSuperstep();
    Long currentIteration = getSuperstep();
    /* TODO: iterate until convergence to labels (MulticlassClassifierWritable.fValue) */
    if (currentIteration / 3 == maxIteration) {
        voteToHalt();/* www  . j a  va  2  s . c o m*/
        return;
    }

    switch (currentIteration.intValue() % 3) {
    case 0:
        initialLabeling();
        break;
    case 1:
        Integer argMaxIndex = vertexValue.argMax();
        if (vertexValue.getCurrentValue(argMaxIndex) > 0.0) {
            for (LongWritable targetVertexId : this) {
                final int elemSize = vertexValue.getClassLabelIndexSize();
                DoubleWritable fvals[] = (DoubleWritable[]) vertexValue.getCurrentValues().toArray();
                DoubleWritable edgeWeight = getEdgeValue(targetVertexId);
                DoubleWritable msg[] = new DoubleWritable[elemSize];
                for (int i = 0; i < elemSize; ++i) {
                    msg[i] = new DoubleWritable(fvals[i].get() * edgeWeight.get());
                }
                DoubleArrayWritable daw = new DoubleArrayWritable();
                daw.set(msg);
                sendMsg(targetVertexId, daw);
            }
        }
        break;
    case 2:
        Double norm = 0.0;
        for (LongWritable targetVertexId : this) {
            DoubleWritable edgeValue = this.getEdgeValue(targetVertexId);
            norm += edgeValue.get();
        }
        /* initialize fValue */
        vertexValue.initializeFValue();
        Double tempVals[] = new Double[vertexValue.getClassLabelIndexSize()];
        for (int i = 0; i < vertexValue.getClassLabelIndexSize(); ++i) {
            tempVals[i] = 0.0;
        }
        /* receive messages and update fValues */
        while (msgIterator.hasNext()) {
            DoubleArrayWritable recvMsg = msgIterator.next();
            int fValueIndex = 0;
            for (Double fVal : recvMsg) {
                tempVals[fValueIndex++] += fVal / norm;
            }
        }
        for (int i = 0; i < vertexValue.getClassLabelIndexSize(); ++i) {
            vertexValue.setCurrentValue(i, tempVals[i]);
        }
        break;
    default:
        break;
    }
}

From source file:org.apache.giraph.combiner.DoubleSumMessageCombiner.java

License:Apache License

@Override
public void combine(WritableComparable vertexIndex, DoubleWritable originalMessage,
        DoubleWritable messageToCombine) {
    originalMessage.set(originalMessage.get() + messageToCombine.get());
}

From source file:org.apache.giraph.combiner.MinimumDoubleCombiner.java

License:Apache License

@Override
public void combine(LongWritable vertexIndex, DoubleWritable originalMessage, DoubleWritable messageToCombine) {
    if (originalMessage.get() > messageToCombine.get()) {
        originalMessage.set(messageToCombine.get());
    }//  w w  w .j a  v  a  2  s.co m
}

From source file:org.apache.giraph.combiner.MinimumDoubleMessageCombiner.java

License:Apache License

@Override
public void combine(WritableComparable vertexIndex, DoubleWritable originalMessage,
        DoubleWritable messageToCombine) {
    if (originalMessage.get() > messageToCombine.get()) {
        originalMessage.set(messageToCombine.get());
    }//from   w  ww. j a  v  a  2s.c om
}

From source file:org.apache.giraph.comm.messages.primitives.LongDoubleMessageStore.java

License:Apache License

@Override
public void addPartitionMessages(int partitionId, VertexIdMessages<LongWritable, DoubleWritable> messages)
        throws IOException {
    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();//from  w  ww. j ava2  s . c o  m
            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);
        }
    }
}

From source file:org.apache.giraph.debugger.examples.instrumented.BuggySimpleShortestPathsDebugComputationModified.java

License:Apache License

@Override
public void compute(Vertex<LongWritable, DoubleWritable, FloatWritable> vertex,
        Iterable<DoubleWritable> messages) throws IOException {
    // We do a dummy read of the aggregator below because for now we only
    // intercept an aggregator
    // if at least one vertex reads it.
    LongWritable aggregatedValue = getAggregatedValue(
            SimpleShortestPathsMaster.NV_DISTANCE_LESS_THAN_THREE_AGGREGATOR);
    if (aggregatedValue != null) {
        System.out.print("NV_DISTANCE_LESS_THAN_THREE_AGGREGATOR: " + aggregatedValue.get() + "\n");
    }//from  ww w. ja  va2s  .  c  o  m
    if (getSuperstep() == 0) {
        vertex.setValue(new DoubleWritable(isSource(vertex) ? 0d : Double.MAX_VALUE));
    }
    double previousValue = vertex.getValue().get();
    double minDist = previousValue;
    for (DoubleWritable message : messages) {
        minDist = Math.min(minDist, message.get());
    }
    if (LOG.isDebugEnabled()) {
        LOG.debug("Vertex " + vertex.getId() + " got minDist = " + minDist + " vertex value = "
                + vertex.getValue());
    }
    if (minDist < vertex.getValue().get() || getSuperstep() == 0 && minDist == 0) {
        vertex.setValue(new DoubleWritable(minDist));
        for (Edge<LongWritable, FloatWritable> edge : vertex.getEdges()) {
            double distance = minDist + edge.getValue().get();
            if (LOG.isDebugEnabled()) {
                LOG.debug(
                        "Vertex " + vertex.getId() + " sent to " + edge.getTargetVertexId() + " = " + distance);
            }
            // INTENTIONAL BUG:Instead of sending the distance (i.e. by adding edge
            // values),
            // we send the vertex value.
            sendMessage(edge.getTargetVertexId(), new DoubleWritable(minDist));
        }
    }
    if (previousValue > 3 && minDist <= 3) {
        aggregate(SimpleShortestPathsMaster.NV_DISTANCE_LESS_THAN_THREE_AGGREGATOR, new LongWritable(1));
    }
    vertex.voteToHalt();
}

From source file:org.apache.giraph.debugger.examples.pagerank.SimplePageRankComputation.java

License:Apache License

@Override
public void compute(Vertex<LongWritable, DoubleWritable, NullWritable> vertex,
        Iterable<DoubleWritable> messages) throws IOException {
    if (getSuperstep() >= 1) {
        double sum = 0;
        for (DoubleWritable message : messages) {
            sum += message.get();
        }/*from   ww w  . j  a v a 2  s  . c om*/
        DoubleWritable vertexValue = new DoubleWritable((0.15f / getTotalNumVertices()) + 0.85f * sum);
        vertex.setValue(vertexValue);
        aggregate(MAX_AGG, vertexValue);
        aggregate(MIN_AGG, vertexValue);
        aggregate(SUM_AGG, new LongWritable(1));
        // LOG.info(vertex.getId() + ": PageRank=" + vertexValue + " max=" +
        // getAggregatedValue(MAX_AGG) + " min=" + getAggregatedValue(MIN_AGG));
    }

    if (getSuperstep() < MAX_SUPERSTEPS) {
        long edges = vertex.getNumEdges();
        sendMessageToAllEdges(vertex, new DoubleWritable(vertex.getValue().get() / edges));
    } else {
        vertex.voteToHalt();
    }
}

From source file:org.apache.giraph.debugger.examples.simpledebug.BuggySimpleShortestPathsComputation.java

License:Apache License

@Override
public void compute(Vertex<LongWritable, DoubleWritable, FloatWritable> vertex,
        Iterable<DoubleWritable> messages) throws IOException {
    // We do a dummy read of the aggregator below because for now we only
    // intercept an aggregator
    // if at least one vertex reads it.
    LongWritable aggregatedValue = getAggregatedValue(
            SimpleShortestPathsMaster.NV_DISTANCE_LESS_THAN_THREE_AGGREGATOR);
    if (aggregatedValue != null) {
        System.out.print("NV_DISTANCE_LESS_THAN_THREE_AGGREGATOR: " + aggregatedValue.get() + "\n");
    }//from   w  w  w  . j ava2  s. c om
    if (getSuperstep() == 0) {
        vertex.setValue(new DoubleWritable(isSource(vertex) ? 0d : Double.MAX_VALUE));
    }
    double previousValue = vertex.getValue().get();
    double minDist = previousValue;
    for (DoubleWritable message : messages) {
        minDist = Math.min(minDist, message.get());
    }
    if (LOG.isDebugEnabled()) {
        LOG.debug("Vertex " + vertex.getId() + " got minDist = " + minDist + " vertex value = "
                + vertex.getValue());
    }
    if (minDist < vertex.getValue().get() || getSuperstep() == 0 && minDist == 0) {
        vertex.setValue(new DoubleWritable(minDist));
        for (Edge<LongWritable, FloatWritable> edge : vertex.getEdges()) {
            double distance = minDist + edge.getValue().get();
            if (LOG.isDebugEnabled()) {
                LOG.debug(
                        "Vertex " + vertex.getId() + " sent to " + edge.getTargetVertexId() + " = " + distance);
            }
            // INTENTIONAL BUG:Instead of sending the distance (i.e. by adding edge
            // values),
            // we send minDist, which is the vertex value.
            sendMessage(edge.getTargetVertexId(), new DoubleWritable(minDist));
        }
    }
    if (previousValue > 3 && minDist <= 3) {
        aggregate(SimpleShortestPathsMaster.NV_DISTANCE_LESS_THAN_THREE_AGGREGATOR, new LongWritable(1));
    }
    vertex.voteToHalt();
}