What happens if you do something like this. https://gist.github.com/sidhhu/1e7062607e38174e95cf
Thanks Sid On Mon, Mar 7, 2016 at 10:22 PM, Sai Dilip Reddy Kiralam < [email protected]> wrote: > I want to emit "id" and "mns" at same time in single emit .right now I can > emit them individually in a for each loop. > Hope you got my problem. > > > > *Best regards,* > > *K.Sai Dilip Reddy,* > > > *Software Engineer - Hadoop Trainee,2-39, Old SBI Road, Sri Nagar > Colony, Gannavaram - 521101.* > *www.aadhya-analytics.com <http://www.aadhya-analytics.com/>.* > *[image: Inline image 1]* > > On Mon, Mar 7, 2016 at 8:18 PM, Aaron.Dossett <[email protected]> > wrote: > >> Can you explain just what it is you want your code to do? >> >> From: Sai Dilip Reddy Kiralam <[email protected]> >> Reply-To: "[email protected]" <[email protected]> >> Date: Saturday, March 5, 2016 at 1:10 AM >> To: "[email protected]" <[email protected]> >> Subject: Re: How to emit the values in a for-each loop >> >> HI Aaron >> >> I did not get the point of setting up two emitting on two different >> channels.Can you explain with sample code snippet . >> Thank you >> >> >> On Fri, Mar 4, 2016 at 9:45 PM, Aaron.Dossett <[email protected]> >> wrote: >> >>> Since you are declaring that you emit two values you need to emit two >>> values any time you call emit. If you want to emit two totally different >>> things at different times (ids and nms) you should set up the bolt to emit >>> on two different channels. You should also only “ack” your tuple once, at >>> the end of all your processing. >>> >>> From: Sai Dilip Reddy Kiralam <[email protected]> >>> Reply-To: "[email protected]" <[email protected]> >>> Date: Tuesday, March 1, 2016 at 6:16 AM >>> To: "[email protected]" <[email protected]> >>> Subject: How to emit the values in a for-each loop >>> >>> I'm having the a string values which are appended so i used the for each >>> loop and sliptted them and emit them with in the for each loop.if I'm >>> getting id string v="1,2,3"; >>> I'm using for each and emitting the id in for loop itself. >>> next when I Tried to emit the value of other string which is a appended >>> one and declaring it as field.I getting the error saying >>> >>> java.lang.IllegalArgumentException: Tuple created with wrong number of >>> fields. Expected 2 fields but got 1 fields at >>> backtype.storm.tuple.TupleImpl.<init>(TupleImpl.java:58) at >>> backtype.storm.daemon.executor$fn__5694$fn__5707$bolt_emit__5736.invoke(executor.clj:739) >>> at >>> backtype.storm.daemon.executor$fn__5694$fn$reify__5742.emit(executor.clj:763) >>> at backtype.storm.task.OutputCollector.emit(OutputCollector.java:203) at >>> backtype.storm.task.OutputCollector.emit(OutputCollector.java:63) at >>> backtype.storm.task.OutputCollector.emit(OutputCollector.java:101) at >>> test.bolts.TInserts.execute(TInsert.java:264) >>> >>> >>> >>> Here is my bolt code. >>> >>> public void execute(Tuple tuple) { >>> try {String screenname=tuple.getStringByField("s_name"); >>> String mentionname=tuple.getStringByField("n_name"); >>> String mentionid=tuple.getStringByField("n_id"); >>> >>> if(mentionid != null && !mentionid.isEmpty()){ >>> for(String id:mentionid.split(",")){ >>> id = id.trim(); >>> this.collector.emit(new Values(id)); >>> this.collector.ack(tuple); >>> }//for close >>> }//if condtion for id >>> if(mentionname != null && !mentionname.isEmpty()){ >>> for(String mns:mentionname.split(",")){ >>> mns = mns.trim(); >>> this.collector.emit(new >>> Values(mns));this.collector.ack(tuple); >>> }//for close >>> }//if condtion for mentionname >>> >>> } //if close >>> } >>> catch (Exception e) { >>> this.collector.reportError(e); >>> this.collector.fail(tuple); >>> } >>> } >>> >>> @Override >>> public void declareOutputFields(OutputFieldsDeclarer >>> outputFieldsDeclarer) {// outputFieldsDeclarer.declare(new >>> Fields("id"));//doesn't throw any exception if i emit only id(1st for) >>> outputFieldsDeclarer.declare(new Fields("id","mns"));//thows exception >>> }} >>> >>> please give the suggestion that I need to change in the bolt code. >>> >> >> >
