我们如何知道Giraph中使用的消息的价值

时间:2014-11-05 21:26:25

标签: giraph

我们如何知道SimpleShortestPathsComputation中message.get()的值?

如果我们有Vertex<DoubleWritable, DoubleWritable, DoubleWritable> vertex而不是

Vertex<LongWritable, DoubleWritable, FloatWritable> vertex

我们如何知道消息具有MinDist的值而不是VertextID或EdgeValue?

@Override   public void compute(
      Vertex<LongWritable, DoubleWritable, FloatWritable> vertex,
      Iterable<DoubleWritable> messages) throws IOException {
    if (getSuperstep() == 0) {
      vertex.setValue(new DoubleWritable(Double.MAX_VALUE));
    }
    double minDist = isSource(vertex) ? 0d : Double.MAX_VALUE;
    for (DoubleWritable message : messages) {
      minDist = Math.min(minDist, message.get());
    }

谢谢

1 个答案:

答案 0 :(得分:1)

消息将具有您将通过sendMessage方法放入的值。仅仅因为它们具有相同的类型,并不意味着事情可能会混淆。这不是Giraph中序列化/反序列化的工作方式。

如果你不相信,你也可以看看这里的代码:https://github.com/apache/giraph

除了你混合了一个东西,Message不包含最小距离,最小距离保存在顶点'值内。消息包含到源顶点的距离,当它通过当前顶点并且实际上是边缘数据(您称之为边缘值)。消息数据或边缘数据实际上是原始案例中的FloatWritable类型 - 请参阅代码here

....
/**
 * Class which holds vertex id, data and edges.
 *
 * @param <I> Vertex id
 * @param <V> Vertex data
 * @param <E> Edge data
 */
public interface Vertex<I extends WritableComparable,
    V extends Writable, E extends Writable> extends
    ImmutableClassesGiraphConfigurable<I, V, E> {
    ....
}