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