package resa.examples.outdet; import backtype.storm.task.OutputCollector; import backtype.storm.task.TopologyContext; import backtype.storm.topology.IRichBolt; import backtype.storm.topology.OutputFieldsDeclarer; import backtype.storm.tuple.Tuple; import java.util.*; /** * Created by ding on 14-3-14. */ public class Updater implements IRichBolt { private OutputCollector collector; private Map<String, List<BitSet>> padding; private int projectionSize; public Updater(int projectionSize) { this.projectionSize = projectionSize; } @Override public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { this.collector = collector; padding = new HashMap<>(); } @Override public void execute(Tuple input) { String key = input.getValueByField(ObjectSpout.TIME_FILED) + "-" + input.getValueByField(ObjectSpout.ID_FILED); List<BitSet> ret = padding.get(key); if (ret == null) { ret = new ArrayList<>(); padding.put(key, ret); } ret.add((BitSet) input.getValueByField(Detector.OUTLIER_FIELD)); if (ret.size() == projectionSize) { padding.remove(key); BitSet result = ret.get(0); ret.stream().forEach((bitSet) -> { if (result != bitSet) { result.or(bitSet); } }); // output //System.out.println(result); // result.stream().forEach((status) -> { // if (status == 0) { // // output // collector.emit(new Values()); // } // }); } collector.ack(input); } @Override public void cleanup() { } @Override public void declareOutputFields(OutputFieldsDeclarer declarer) { } @Override public Map<String, Object> getComponentConfiguration() { return null; } }