哪个更适合用于管理Vertex状态:POJO实例变量或Giraph值?

时间:2014-08-26 19:36:34

标签: giraph

我很困惑何时可以使用Vertex实例变量维护状态而不是正确的Giraph值ala getValue()。我在源代码中找到的一个有趣的例子演示了:SimpleTriangleClosingVertex,它既有实例变量(closeMap)又有自定义顶点值(IntArrayListWritable)。我有点惊讶的是,使用实例变量是合法的,因为可能搞砸序列化(?)我的问题:是否有效?如果是这样,我如何选择一个而不是另一个?非常感谢。

1 个答案:

答案 0 :(得分:1)

Giraph中的Compute类未序列化。 Giraph只序列化您在顶点变量的compute方法中接收的值对象。您可以创建尽可能多的实例变量,以便使您的函数定义更容易,因为它们可以访问实例变量而不需要传递所有参数但总是考虑以下两点:

  1. 只有在计算结束时保存的顶点值中的内容才会被序列化并记住,直到下次运行计算
  2. Giraph重用计算类对象。它创建一个对象池,然后在该对象上调用具有许多不同顶点的compute方法。所以在计算方法中,你需要做的第一件事就是初始化你的类,包括设置所有默认值,这样你就不会得到错误的结果,这些结果基于之前计算过的一些随机顶点 - 在SAME对象中实例