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