1

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

4

1 回答 1

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());
      }
    }
  }
}
于 2014-08-26T17:32:19.437 回答