我对何时可以使用 Vertex 实例变量来维护状态而不是正确的 Giraph 值 ala getValue()感到困惑。我在源代码中找到的一个有趣的示例演示了这两者:SimpleTriangleClosingVertex,它同时具有实例变量 (closeMap) 和自定义顶点值 (IntArrayListWritable)。我有点惊讶使用实例变量是合法的,因为可能会搞砸序列化(?)我的问题:是否有效?如果是这样,我如何选择一个而不是另一个?非常感谢。
问问题
64 次
1 回答
1
Giraph 中的计算类没有序列化。Giraph 仅序列化您在顶点变量的计算方法中收到的值对象。您可以根据需要创建尽可能多的实例变量,以使您的函数定义更容易,因为它们可以访问实例变量并且不需要传递所有参数,但始终考虑以下两件事:
- 只有在计算结束时保存的顶点值中的内容才会被序列化并记住,直到下次运行计算
- Giraph 重用计算类对象。它创建一个对象池,然后在该对象上调用具有许多不同顶点的计算方法。因此,在计算方法中,您需要做的第一件事是初始化您的类,包括设置所有默认值,这样您就不会根据之前计算过的一些随机顶点得到错误的结果 - 在 SAME 对象中实例。
于 2014-08-27T08:19:57.053 回答