You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@giraph.apache.org by Arun Kumar <to...@gmail.com> on 2014/03/21 15:08:48 UTC
Running Triangle Count problem in giraph
Hi
i am working with giraph version1.0 and i have created a TriangleCounting
program based on some previous posts .My program runs with out any error
but it is not giving any relevant data .
for clarity i am attaching the program and the input used.
import org.apache.giraph.edge.Edge;
import org.apache.giraph.graph.Vertex;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.FloatWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.log4j.Logger;
import java.io.IOException;
@Algorithm(
name = "Traingle Counting in Giraph",
description = "Return the total number of triangle and also enumerates
traingles per vertex"
)
public class TriangleCounting extends Vertex<LongWritable,
DoubleWritable,FloatWritable, DoubleWritable> {
/** Class logger */
private static final Logger LOG =
Logger.getLogger(TriangleCounting.class);
@Override
public void compute(Iterable<DoubleWritable> messages) throws IOException
{
/** First Superstep releases messages to vertexIds() whose value is
greater than its value. Both VertexId and Message are double **/
if (getSuperstep() == 0) {
for (Edge<LongWritable, FloatWritable> edge:getEdges()) {
if (edge.getTargetVertexId().compareTo(getId()) == 1) {
double d=getId().get();
sendMessage(edge.getTargetVertexId(),new DoubleWritable(d));
if (LOG.isDebugEnabled()) {
LOG.debug("Vertex " + getId() + " sent message " + getId() + " to
vertex " + edge.getTargetVertexId());
}
System.out.println("Vertex " + getId() + " sent message " + getId()
+ " to vertex " + edge.getTargetVertexId());
}
}
}
/** Second superstep releases messages to message.get() < vertex.getId()
< targetVertexId() **/
if (getSuperstep() == 1) {
for (DoubleWritable message: messages) {
for (Edge<LongWritable, FloatWritable> edge: getEdges()) {
double etvid=edge.getTargetVertexId().compareTo(getId()) +
getId().get();
if (new DoubleWritable(etvid).compareTo(message) == 2) {
sendMessage(edge.getTargetVertexId(), message);
if (LOG.isDebugEnabled()) {
LOG.debug("Vertex " + getId() + " sent message " + message +
" to vertex " + edge.getTargetVertexId());
}
System.out.println("Vertex " + getId() + " sent message " +
message + " to vertex " + edge.getTargetVertexId());
}
}
}
}
/** Sends messages to all its neighbours, the messages it receives **/
if (getSuperstep() == 2) {
for (DoubleWritable message: messages) {
sendMessageToAllEdges(message);
}
}
if (getSuperstep() == 3) {
double Value = 0.0;
for (DoubleWritable message: messages) {
if (getId().equals(message)) {
Value += 1.0;
System.out.println("Vertex " + getId() + " received message "
+ message);
}
}
setValue(new DoubleWritable(Value));
}
voteToHalt();
}
}