Hi Sandy,
it's up to the concrete aggregator to define the behaviour. In case of
pagerank there is the AverageAggregator is defined.
It inherits from the AbsDiffAggregator which takes the absolute difference
of the old value to the new value.
The AverageAggregator then just averages this difference over all
accumulated values in the graph.
2012/10/25 Sandy Ding <sandy.dingxin@gmail.com>
> Hi, all
>
> When I checked the source code, I am confused about how the globa error of
> pagerank is calculated.
> It seems to me that in bsp() (GraphJobRunner.java), after each vertex is
> computed,
> first aggregate(vertex, vertex.getValue()) is called,
> then aggregate(vertex, lastValue, vertex.getValue()) is also called.
>
> <the last part of bsp() function in GraphJobRunner.java>
> if (aggregators != null) {
> 283 if (this.aggregators != null) {
> 284 for (int i = 0; i < this.aggregators.length; i++) {
> 285 Aggregator<M, Vertex<V, E, M>> aggregator =
> this.aggregators[i];
> 286 aggregator.aggregate(vertex, vertex.getValue());
> 287 if (isAbstractAggregator[i]) {
> 288 AbstractAggregator<M, Vertex<V, E, M>> intern =
> ((AbstractAggregator<M, Vertex<V, E, M>>) aggregator);
> 289 intern.aggregate(vertex, lastValue,
> vertex.getValue());
> 290 intern.aggregateInternal();
> 291 }
> 292 }
> 293 }
> 294 }
>
> This means that both the vertex value and the difference will be added to
> compute the global error.
> But I think intuitively only the difference should be accumulated.
> So what's the consideration? Or do I have some misunderstandings?
>
> Best
> Sandy
>
