package com.hadooparchitecturebook.zombie.giraph;
import java.io.IOException;
import org.apache.giraph.edge.Edge;
import org.apache.giraph.graph.Vertex;
import org.apache.giraph.io.formats.TextVertexOutputFormat;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.TaskAttemptContext;
import org.apache.log4j.Logger;
public class ZombieTextVertexOutputFormat extends
TextVertexOutputFormat<LongWritable, Text, LongWritable> {
private static final Logger LOG = Logger.getLogger(ZombieTextVertexOutputFormat.class);
@Override
public TextVertexWriter createVertexWriter(
TaskAttemptContext context) throws IOException, InterruptedException {
return new ZombieRecordTextWriter();
}
public class ZombieRecordTextWriter extends TextVertexWriter {
Text newKey = new Text();
Text newValue = new Text();
public void writeVertex(Vertex<LongWritable, Text, LongWritable> vertex)
throws IOException, InterruptedException {
Iterable<Edge<LongWritable, LongWritable>> edges = vertex.getEdges();
StringBuilder strBuilder = new StringBuilder();
boolean isFirst = true;
for (Edge<LongWritable, LongWritable> edge : edges) {
if (isFirst) {
isFirst = false;
} else {
strBuilder.append(",");
}
strBuilder.append(edge.getValue());
}
newKey.set(vertex.getId().get() + "|" + vertex.getValue() + "|"
+ strBuilder.toString());
getRecordWriter().write(newKey, newValue);
}
}
}