giraph-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nishant gandhi <nishantgandh...@gmail.com>
Subject Re: MessageCombiner
Date Mon, 12 May 2014 06:03:18 GMT
Let say I have 5 nodes which are sending message to 6th node.
each 5 node sending one message to 6th node containing some value.
I want to intercept all those 5 messages going towards 6th node.
after that I want to find the maximum value contained among those 5 nodes.
and send single message from combiner to 6th node which contain only the
maximum value among those messages.


I have tried to write a simple code for it but it seems not working. I dont
know what I am doing wrong.

In the code below, node 0 trying to send 3 message to node 1.
My final goal is, in superstep=1, node 1 should receive only one message
with contain 4 only.
My current code receiving all the 3 messages and hence I am getting final
value of variable:"test" as 7.


public class CombinerTest extends BasicComputation<LongWritable,
DoubleWritable, FloatWritable,DoubleWritable>
 {

    @Override
    public void compute(Vertex<LongWritable, DoubleWritable, FloatWritable>
arg0,Iterable<DoubleWritable> arg1) throws IOException {



        if(getSuperstep()==0 && (arg0.getId().get()==0))
        {
            sendMessage(new LongWritable(1),new DoubleWritable(1));
            sendMessage(new LongWritable(1),new DoubleWritable(2));
            sendMessage(new LongWritable(1),new DoubleWritable(4));
        }
        DoubleWritable test=new DoubleWritable(0);
        if(getSuperstep()==1)
        {
            for(DoubleWritable messages :arg1)
            {
                    test.set(test.get()+messages.get());
                //    changed=true;
            }
            arg0.setValue(test);
        }
        arg0.voteToHalt();
    }

    public void combine(LongWritable vertexIndex, DoubleWritable
originalMessage, DoubleWritable messageToCombine)
    {
            if(originalMessage.get() > messageToCombine.get())
            {
              originalMessage.set(messageToCombine.get());
            }
    }
     public DoubleWritable createInitialMessage()
     {
            return new DoubleWritable(Double.MAX_VALUE);
     }


}




please help me to figure out correct way to write code.
Thanks Maria.

Nishant Gandhi
M.Tech. CSE
IIT Patna


On Mon, May 12, 2014 at 11:11 AM, Maria Stylianou <marsty5@gmail.com> wrote:

> Hi Nishant,
>
> Can you be more specific? Are you trying to combine all incoming messages
> of a vertex into one message? What do you mean combine? Add values? Or
> append to a list?
> The message can be a list so you can put all values together.
>
> Maria
>
>
> On Sunday, May 11, 2014, nishant gandhi <nishantgandhi99@gmail.com> wrote:
>
>> Hi,
>> I am trying to write code that use Combiner. I want to combine all
>> message into one for each vertex. That one message contains message value
>> bigger than all the other message values.
>> Please help.
>>
>> Nishant Gandhi
>> M.Tech. CSE
>> IIT Patna
>>
>
>
> --
> Sent from Android Mobile
>

Mime
View raw message