public class StreamTest{
public static void main(String[] args) throws Exception{
final StreamExecutionEnvironment env= StreamExecutionEnvironment.getExecutionEnvironment();
//******************************source*********************************************
//自定义数据源SourceFunction RichParallelSourceFunction
DataStreamSource<Tuple2<String, Long>> ds=env.addSource(new SourceFunction<Tuple2<String, Long>>(){//
private Long count=1L;
private boolean flag=true;
@Override
public void run(SourceContext sourceContext) throws Exception {
while(flag){
Tuple2<String, Long> t=null;
if(count%2==0){
t=new Tuple2<String, Long>("A",count);
}else
t=new Tuple2<String, Long>("B",count);
sourceContext.collect(t);
count++;
Thread.sleep(1000);
}
}
@Override
public void cancel() {
flag=false;
}
}).setParallelism(1);//自定义单一分区数据源
DataStream<Tuple2<String, Long>> dst=ds.map((l)->{
System.out.println(l);
return l;}).returns(Types.TUPLE(Types.STRING, Types.LONG));
DataStream sum=dst.keyBy(0).timeWindow(Time.seconds(2))
//DataStream sum=dst.keyBy(0).timeWindowAll(Time.seconds(2)).sum(1);//keyby无效
//keyby
/**自定义实体类keyby指定方法
* .keyBy(new KeySelector<ProductViewData, String>() {
@Override
public String getKey(ProductViewData value) throws Exception {
return value.productId;
}
//时间窗口 6秒 滑动间隔3秒
})
*/
.sum(1);
.reduce((t2,t3)->{ //三个参数类型必须一致
return new Tuple2<>(t2.f0,t2.f1+t3.f1);
}).returns(Types.TUPLE(Types.STRING, Types.LONG));
sum.print();
env.execute(StreamTest.class.getSimpleName());
}
}
FLINK实例
最新推荐文章于 2022-12-20 17:00:36 发布