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.
>>
>
>

Reply via email to