1

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

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

Vertex<LongWritable, DoubleWritable, FloatWritable> vertex

我们如何知道 Messages 的值是 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());
    }

谢谢

4

1 回答 1

1

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

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

除了你搞混了,消息不包含最小距离,最小距离保存在顶点的值中。消息包含到源顶点的距离,当它通过当前顶点并且实际上是边缘数据(你称之为边缘值)。消息数据或边缘数据实际上是FloatWritable原始案例中的类型 - 请参见此处的代码:

....
/**
 * 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> {
    ....
}
于 2014-11-06T10:55:21.733 回答