storm trident 自定义spout

package cn.crxy.trident;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


import storm.trident.TridentTopology;
import storm.trident.operation.BaseFunction;
import storm.trident.operation.TridentCollector;
import storm.trident.spout.IBatchSpout;
import storm.trident.tuple.TridentTuple;
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.task.TopologyContext;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;


public class TridentLocalPologySum {
public static class DataSource implements IBatchSpout{
   HashMap<Long, List<List<Object>>> batches = new HashMap<Long, List<List<Object>>>();
@Override
public void ack(long batchId) {
this.batches.remove(batchId);

}


@Override
public void close() {

}


//业务逻辑
int num =0;
@Override
public void emitBatch(long batchId, TridentCollector collector) {
List<List<Object>> batch = this.batches.get(batchId);
if(batch==null){
batch = new ArrayList<List<Object>>();
System.out.println("num==========="+num);
batch.add(new Values(num++));
this.batches.put(batchId, batch);
}

for (List<Object> list : batch) {
collector.emit(list);
}

}


@Override
public Map getComponentConfiguration() {
Config config = new Config();
return config;
}


@Override
public Fields getOutputFields() {
return new Fields("sentence");
}


@Override
public void open(Map arg0, TopologyContext arg1) {

}

}
public static class SumBolt extends BaseFunction{
int sum = 0;
@Override
public void execute(TridentTuple tuple, TridentCollector collector) {
Integer value0 = tuple.getInteger(0);
sum+=value0;
System.err.println("求和为="+sum );



}

}
public static void main(String[] args) {
//输出为new Fields("sentence")
//FixedBatchSpout spout = new FixedBatchSpout(new Fields("sentence"), 1, new Values(1));
TridentTopology tridentTopology = new TridentTopology();
//自定义spout new DataSource()
tridentTopology.newStream("spout1", new DataSource())
.each(new Fields("sentence"), new SumBolt(), new Fields(""));
    LocalCluster localCluster = new LocalCluster();
    localCluster.submitTopology("trident", new Config(), tridentTopology.build());
}

}



输出结果为:


num===========0
求和为=0
num===========1
求和为=1
num===========2
求和为=3
num===========3
求和为=6
num===========4
求和为=10
num===========5
求和为=15
num===========6
求和为=21
num===========7
求和为=28
num===========8
求和为=36
num===========9
求和为=45
求和为=55
num===========10
num===========11
求和为=66
num===========12
求和为=78
num===========13
求和为=91
num===========14
求和为=105
num===========15
求和为=120
num===========16
求和为=136
num===========17
求和为=153
num===========18
求和为=171
num===========19
求和为=190
num===========20
求和为=210
num===========21
求和为=231
num===========22
求和为=253


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值