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