如何仅输出图形的子集?

时间:2014-08-25 18:36:35

标签: giraph

我有一个图形计算,它以某种类型的顶点子集开始,并通过图形将信息传播到一组目标顶点,这些顶点也是图形的子集。我想只输出来自那些特定顶点的信息,但是我没有看到在各种VertexOutputFormat子类中做到这一点的方法,这些子类似乎都是为了为图中的每个顶点输出一些东西。我该怎么做呢?例如,有输出阶段的钩子我可以过滤输出吗?或者我是否应该编写一个VertexOutputFormat实现,它不会为没有数据的顶点生成输出?提前谢谢。

1 个答案:

答案 0 :(得分:2)

你可以简单地扩展类并添加一个if条件,这样就可以了。

例如,这里的一个类只打印出顶点id:

public class ExampleTextVertexOutputFormat extends
    TextVertexOutputFormat<LongWritable, LongWritable, NullWritable> {
  @Override
  public TextVertexWriter createVertexWriter(
          TaskAttemptContext context) throws IOException, InterruptedException {
    return new ExampleTextVertexLineWriter();
  }

  /**
   * Outputs for each line the vertex id and the searched vertices with their
   * hop count
   */
  private class ExampleTextVertexLineWriter extends TextVertexWriterToEachLine {
    @Override
    protected Text convertVertexToLine(
        Vertex<LongWritable, LongWritable, NullWritable> vertex) throws IOException {
      if (vertex.getId() % 2 == 0) {
        return new Text(vertex.getId());
      }
    }
  }
}