Also, I realize that I just sent an uncommented version... sorry guys, but the algorithm consists of just three supersteps: Superstep 0.) Source sends list of source's neighbors to each neighbor Superstep 1.) Neighbor receives list of source's neighbors from source, counts number of mutual neighbors, sends this value (in a 1-element list) back to source Superstep 2.) Source receives messages from neighbors that contain number of mutual neighbors. These are summed up and divided by the number of possible connections between neighbors to get the local clustering coefficient (between 0 and 1). This is set as the source vertex's value. On Mon, Aug 12, 2013 at 7:28 AM, Kyle Orlando wrote: > Alrighty, here's my code: > > public void compute( > Vertex vertex, > Iterable messages) throws IOException { > > if (isSource(vertex)) { > if (getSuperstep() == 0) { > System.out.println("\nSUPERSTEP 0\n------------------------------"); > IntArrayListWritable sourceNeighbors = new IntArrayListWritable(); > > vertex.setValue(new DoubleWritable(0)); > > for (Edge edge : vertex.getEdges()) { > IntWritable targetVertex = new > IntWritable(edge.getTargetVertexId().get()); > sourceNeighbors.add(targetVertex); > } > > for (IntWritable neighbor : sourceNeighbors) { > sendMessage(neighbor, sourceNeighbors); > System.out.println("Vertex " + vertex.getId() + " sends " + > sourceNeighbors + " to " + neighbor); > } > > } else if (getSuperstep() == 2) { > int total = vertex.getNumEdges(); > int possibleCombos = total * (total - 1); > int mutualNeighbors = 0; > double coefficient = 0; > int count = 1; > > System.out.println("\nSUPERSTEP 2\n------------------------------"); > > for (IntArrayListWritable message : messages) { > System.out.println("Message " + count + " contains: " + message); > mutualNeighbors += message.get(0).get(); > count++; > } > > if (possibleCombos > 0) { > coefficient = (double)mutualNeighbors / possibleCombos; > vertex.setValue(new DoubleWritable(coefficient)); > } > > } > } else { > vertex.setValue(new DoubleWritable(0)); > > if (getSuperstep() == 1) { > int mutualNeighbors = 0; > > System.out.println("\nSUPERSTEP 1\n------------------------------"); > IntArrayListWritable sourceNeighbors = messages.iterator().next(); > System.out.println("Vertex " + vertex.getId() + " receives " + > sourceNeighbors); > > for (Edge edge : vertex.getEdges()) { > IntWritable targetVertex = new > IntWritable(edge.getTargetVertexId().get()); > if (sourceNeighbors.contains(targetVertex)) mutualNeighbors++; > } > > IntArrayListWritable neighborCount = new IntArrayListWritable(); > neighborCount.add(new IntWritable(mutualNeighbors)); > > sendMessage(new IntWritable(SOURCE_ID.get(getConf())), neighborCount); > System.out.println("Vertex " + vertex.getId() + " sends " + > neighborCount + " to Vertex " + SOURCE_ID.get(getConf())); > > } > } > > vertex.voteToHalt(); > } > > > On Fri, Aug 9, 2013 at 10:15 PM, Claudio Martella > wrote: >> you'd have to show us the code in the compute method. your problem might be >> caused by object reusal. >> >> >> On Fri, Aug 9, 2013 at 9:05 PM, Kyle Orlando >> wrote: >>> >>> Hello, >>> >>> I am trying to write code to compute the local clustering coefficient >>> of a vertex/some vertices, and to do this I send a message that >>> contains a list of the source's neighbors to each of its neighbors. >>> This is in, of course, an IntArrayListWritable. I check the list that >>> I am sending before invoking sendMessage(), and it appears to be >>> correct. However, when I use message.iterator.next() or something >>> similar, the IntArrayListWritable objects seem to repeat or something. >>> I did some logging, and here was the output: >>> >>> SUPERSTEP 0 >>> ------------------------------ >>> Vertex 1 sends [2, 3, 4] to Vertex 2 >>> Vertex 1 sends [2, 3, 4] to Vertex 3 >>> Vertex 1 sends [2, 3, 4] to Vertex 4 >>> >>> SUPERSTEP 1 >>> ------------------------------ >>> Vertex 2 receives [2, 3, 4] >>> Vertex 2 sends [1] to Vertex 1 >>> >>> SUPERSTEP 1 >>> ------------------------------ >>> Vertex 3 receives [2, 3, 4, 2, 3, 4] >>> Vertex 3 sends [1] to Vertex 1 >>> >>> SUPERSTEP 1 >>> ------------------------------ >>> Vertex 4 receives [2, 3, 4, 2, 3, 4, 2, 3, 4] >>> Vertex 4 sends [0] to Vertex 1 >>> >>> SUPERSTEP 2 >>> ------------------------------ >>> Message 1 contains: [1] >>> Message 2 contains: [1, 1, 1] >>> Message 3 contains: [1, 1, 1, 1, 1, 0] >>> >>> What is happening? >>> >>> -- >>> Kyle Orlando >>> Computer Engineering Major >>> University of Maryland >> >> >> >> >> -- >> Claudio Martella >> claudio.martella@gmail.com > > > > -- > Kyle Orlando > Computer Engineering Major > University of Maryland -- Kyle Orlando Computer Engineering Major University of Maryland