Hi, Please take a look at this snippet of code copied and modified from Mapper class to implement your scenario. - https://github.com/ssmenon/hama/edit/master/hama-mapreduce/src/org/apache/hama/computemodel/mapreduce/Trials.java Between lines 233 to 245 I am able to send different type of messages. With type checks and generics you shouldn't be encountering Classcast exception at receiving end too. I am yet to test the next superstep, shall update you with sample code for the next superstep mimicking your scenario for receiving.
For elegance, we have an experimental Superstep#compute API(org.apache.hama.bsp.Superstep). I have encountered an issue in job submission framework with this method in distributed mode; fix for this would be pushed to trunk in next few hours. You can still run it using LocalBSPRunner for now. -Suraj On Wed, May 16, 2012 at 9:18 PM, Aditya Sarawgi <[email protected]> wrote: > Hi Edward, > > Yes that is what I did > I wrote an ArrayMessage class (doesn't use generics for now but can be > converted easily) > https://github.com/truncs/hello-world/blob/master/src/main/java/edu/sunysb/cs/ArrayMessage.java > > But the problem is that I am sending a IntegerMessage before and after > reading the IntegerMessage I am sending > an ArrayMessage but the previous IntegerMessage is still there. > > On Wed, May 16, 2012 at 8:34 PM, Edward J. Yoon <[email protected]>wrote: > >> Hi, >> >> To send or receive multiple Message types, I think you can use >> GenericWritable. You can also implement your own GenericMessage and >> contribute it to our project! >> >> Hope this helps you. >> >> On Thu, May 17, 2012 at 7:48 AM, Aditya Sarawgi >> <[email protected]> wrote: >> > Hi Guys, >> > >> > I am wondering how do the receive queues in hama work. Consider this case >> > that I want to sent a different type of BSPMessage in 2 consecutive >> > superstep. >> > In this first superstep I am sending IntMessage and in the next one I am >> > sending a ArrayMessage ( custom message class). >> > >> > Now in the second super step when I do a >> > while ((arrayMessage = (ArrayMessage) peer.getCurrentMessage()) != >> null) { >> > >> > it is throwing a java.lang.ClassCastException, which is obvious since its >> > trying to cast IntMessage to ArrayMessage. >> > I thought the message is dropped from the queue after it is read, is this >> > not the case ? >> > And if it is not, how can this be handled elegantly ? >> > >> > -- >> > Cheers, >> > Aditya Sarawgi >> >> >> >> -- >> Best Regards, Edward J. Yoon >> @eddieyoon >> > > > > -- > Cheers, > Aditya Sarawgi
