package storm.applications.bolt;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import backtype.storm.utils.MutableLong;
import java.util.HashMap;
import java.util.Map;
import storm.applications.constants.WordCountConstants.Field;
public class WordCountBolt extends AbstractBolt {
private final Map<String, MutableLong> counts = new HashMap<>();
@Override
public Fields getDefaultFields() {
return new Fields(Field.WORD, Field.COUNT);
}
@Override
public void execute(Tuple input) {
String word = input.getStringByField(Field.WORD);
MutableLong count = counts.get(word);
if (count == null) {
count = new MutableLong(0);
counts.put(word, count);
}
count.increment();
collector.emit(input, new Values(word, count.get()));
collector.ack(input);
}
}