我们如何知道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());
}
谢谢
答案 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> {
....
}