连续窗口
连续窗口就是多个窗口相连,后面窗口的范围与前面窗口的范围是相互独立的
- 示例
windowAll窗口对前面的窗口产生的数据进行排序
public static void main(String[] args) {
StreamExecutionEnvironment executionEnvironment =
StreamExecutionEnvironment.getExecutionEnvironment();
executionEnvironment.setParallelism(1);
DataStreamSource<String> dataStreamSource = executionEnvironment.socketTextStream(
"localhost", 9097);
dataStreamSource.map(x -> {
String[] split = x.split(",");
City city = new City();
city.setName(split[0]);
city.setNum(Long.valueOf(split[1]));
return city;
}).keyBy(x -> x.getName()).window(TumblingProcessingTimeWindows.of(Time.seconds(10))).reduce(new ReduceFunction<City>() {
@Override
public City reduce(City value1, City value2) throws Exception {
value1.setNum(value1.getNum() + value2.getNum());
return value1;
}
}).windowAll(TumblingProcessingTimeWindows.of(Time.seconds(10))).apply(new AllWindowFunction<City, City, TimeWindow>() {
@Override
public void apply(TimeWindow window, Iterable<City> values, Collector<City> out) throws Exception {
ArrayList<City> list = new ArrayList<>();
values.forEach(list::add);
list.sort(Comparator.comparing(City::getNum).reversed());
list.stream().forEach(out::collect);
}
}).print();
try {
executionEnvironment.execute("test two windows");
} catch (Exception e) {
e.printStackTrace();
}
}