在整个 Giraph 图中,我需要在 Vertex 基础上维护一个数组,以存储在 Vertex 级别完成的几个“健康”检查的结果。
如果它像编写一个新的输入格式一样简单,会被继承?
我担心的事实是,将提供图形的实际数据不需要知道这个数组。
你不需要从任何地方读取数据,如果数组只是在那里保持你不需要读取的步骤之间的临时计算,也不需要写它。
您将需要创建一个新类,其中implements Writable
. 您将在此类中存储数组并处理超级步骤之间的序列化/反序列化。这是在两个函数中完成的:
@Override
public void write(DateOutput dataOutput) throws IOException {
. . . .
}
@Override
public void readFields(DataInput dataInput) throws IOException {
. . . .
}
确保您将以相同的顺序读取和写入字段,因为它们被写入缓冲区并且具有不同的顺序会搞砸一切。
之后,您只需在 Vertex-Value-Type 的 Generic 类型中指定这个类。
虽然如果你在设置过程中没有初始化 VertexValue,当你读取输入文件时,……你应该在第一个 SuperStep ( == 0
)
大约一年前,我写了一篇关于 Giraph 中复杂数据类型的博客文章,也许它会进一步帮助你,尽管与此同时有些事情可能已经发生了变化。