Alrighty, here's my code:

          public void compute(
                      Vertex<IntWritable, DoubleWritable, NullWritable> vertex,
                      Iterable<IntArrayListWritable> 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<IntWritable, NullWritable> 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<IntWritable, NullWritable> 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
<[email protected]> 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 <[email protected]>
> 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
>    [email protected]



-- 
Kyle Orlando
Computer Engineering Major
University of Maryland

Reply via email to