FLink18--全窗口聚合方式2 ProcessWindowApp
一、依赖
二、代码
package net.xdclass.class11;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.collections.IteratorUtils;
import org.apache.flink.api.common.RuntimeExecutionMode;
import org.apache.flink.api.java.functions.KeySelector;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.KeyedStream;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction;
import org.apache.flink.streaming.api.functions.windowing.WindowFunction;
import org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
import org.apache.flink.util.Collector;
import net.xdclass.model.VideoOrder;
import net.xdclass.source.VideoOrderSourceV2;
/**
 *    推荐本方法
 *    全量聚合方法2   process(new ProcessWindowFunction(){})
 *    !!!WindowFunction后面可能废弃,用processWindowFunction更好,有打开关闭功能
 *    全窗口函数,自定义窗口计算,适用于复杂场景
 * @desc 窗口计算,全窗口函数,可以拿到整个窗口的数据做计算
 * @menu
 */
public class FLink18ProcessWindowApp {
    public static void main(String[] args) throws Exception{
        //WebUi方式运行
//        final StreamExecutionEnvironment env =
//                StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //设置运行模式为流批一体
        env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);
        //并行度
        env.setParallelism(1);
        //设置为自定义source
//        DataStream<VideoOrder> ds = env.addSource(new VideoOrderSourceV2());
        DataStream<VideoOrder> ds = env.addSource(new VideoOrderSourceV2());
        KeyedStream<VideoOrder, String> keyByDs = ds.keyBy(new KeySelector<VideoOrder, String>() {
            @Override
            public String getKey(VideoOrder videoOrder) throws Exception {
                return videoOrder.getTitle();
            }
        });
        //全窗口函数,可以拿到整个窗口的数据做计算
        SingleOutputStreamOperator<VideoOrder> sumAllWindowDs = keyByDs
                .window(TumblingProcessingTimeWindows.of(Time.seconds(5)))
                .process(new ProcessWindowFunction<VideoOrder, VideoOrder, String, TimeWindow>() {
                    @Override
                    public void process(String key, Context context, Iterable<VideoOrder> iterable,
                            Collector<VideoOrder> output) throws Exception {
                        List<VideoOrder> list = IteratorUtils.toList(iterable.iterator());
                        if (list.size() <= 0) {
                            return;
                        }
                        int total = list.stream().collect(Collectors.summingInt(VideoOrder::getMoney)).intValue();
                        //新建一个返回结果对象,数据聚合后发送出去
                        VideoOrder videoOrder = new VideoOrder();
                        videoOrder.setMoney(total);
                        videoOrder.setTitle(list.get(0).getTitle());
                        videoOrder.setCreateTime(list.get(0).getCreateTime());
                        //获取窗口开始结束时间,还可以获取很多信息
                        System.out.println("窗口开始时间"+context.window().getStart()+"窗口结束时间"+context.window().getEnd());
                        output.collect(videoOrder);
                    }
                });
        sumAllWindowDs.print();
        //DataStream需要调用execute,可以取个名称
        env.execute("Sailing Window job");
    }
}
												
											FLink18--全窗口聚合方式2 ProcessWindowApp的更多相关文章
- flink-----实时项目---day05-------1. ProcessFunction  2. apply对窗口进行全量聚合 3使用aggregate方法实现增量聚合  4.使用ProcessFunction结合定时器实现排序
		
1. ProcessFunction ProcessFunction是一个低级的流处理操作,可以访问所有(非循环)流应用程序的基本构建块: event(流元素) state(容错,一致性,只能在Key ...
 - [原创]新版PageOffice V4.0为什么用弹出窗口的方式打开文件?
		
前的包含文档处理功能的Web办公系统,在打开文档的时候,一部分系统是采用Office文档嵌入到主窗口页面中右侧工作区域的方式,另一部分系统采用的是弹出新的浏览器窗口,里面完整的嵌入Office文件的打 ...
 - 【CefSharp】 禁用右键菜单 与 控制弹出窗口的方式(限版本39.0.0.1)
		
这周没什么时间,一开始就在忙一些CefSharp的事情,Win10的研究就放了下来,CefSharp的资料挺少的,但好在是开源的,可以我们便宜的折腾.因为两个的内容都不多,我就合成一篇文章啦. 这还里 ...
 - 第三十三章 metrics(1) - graphite搭建 + whisper存储模式 + 高精度向低精度聚合方式 + 集成StatsD + 集成grafana
		
组件介绍: carbon:Carbon实际上是一系列守护进程,组成一个Graphite安装的存储后端.这些守护进程用一个名为Twisted的事件驱动网络引擎监听时间序列数据.Twisted框架让Car ...
 - SSAS维度设计中CustomRollupColumn的用法-自定义聚合方式
		
CustomRollupColumn说明:指定包含多维表达式的列,该表达式可用于聚合特性的度量值.这个属性覆盖给定度量值的AggregateFunction的属性. 解释:通常我们的度量值 ...
 - 【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物
		
原文:[高德地图API]从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物 摘要:覆盖物,是一张地图的灵魂.有覆盖物的地图,才是完整的地图.在 ...
 - 基于全备份+binlog方式恢复数据
		
基于全备份+binlog方式恢复数据 将bkxt从库的全备份在rescs5上恢复一份,用cmdb操作 恢复全备后执行如下操作 set global read_only=OFF; stop slave; ...
 - 使用iframe实现上下窗口结构及登录页全窗口展示Demo
		
iframe.html 首页 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> < ...
 - 史上最全HashMap遍历方式
		
java Hashmap Map TreeMap 的几种遍历方式,全网最全,全网最强 package Collec2; import java.util.HashMap; import java.ut ...
 - esper(3)-窗口&聚合分组
		
一.Insert and Remove Stream 1. select * from com.ebc.updatelistener.User 只输出newEvents,不会输出oldEvents.即 ...
 
随机推荐
- MySQL之sql_mode
			
sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入.在生产环境必须将这个值设置为严格模式,所以开发.测试环境的数据库也必须要设置,这 ...
 - 以下哪一项是对CSMA/CA和CSMA/CD LAN控制通用的CSMA方法的适当描述?
			
A. 检测载波信号并控制数据传输. B. 获得具有传输权的消息(令牌)的终端传输数据. C. 如果在数据传输过程中发生冲突,立即重新发送. D. 即使在使用传输线时也可以传输数据. = ...
 - uniapp多次触发跳转问题
			
问题描述:快速点击跳转页面后会闪退到登陆页面 解决方案:重新封装uniapp跳转api,加防抖锁,To.ts import { NavigateToOptions, RedirectToOptions ...
 - Mysql之myisam引擎
			
这里是早起整理的myisam优势,因为当时刚毕业那会web1.0时代还没过时,很多的门户网站实际上就只是内容展示的时候,或者发布文章公告的场景.所以对于这样的读多写少的场景,大多数使用的还是myisa ...
 - VTK vtkAssembly 拾取
			
在有vtkAssembly的拾取中,vtkAssembly的Pickable决定子Actor能否被拾取.跟子Actor的Pickable没有关系
 - 工作中这样用MQ,很香!
			
前言 消息队列(MQ)是分布式系统中不可或缺的技术之一. 对很多小伙伴来说,刚接触MQ时,可能觉得它只是个"传话工具",但用着用着,你会发现它简直是系统的"润滑剂&quo ...
 - JVM简介—2.垃圾回收器和内存分配策略
			
大纲 1.垃圾回收概述 2.如何判断对象存活 3.各种引用介绍 4.垃圾收集的算法 5.垃圾收集器的设计 6.垃圾回收器列表 7.各种垃圾回收器详情 8.Stop The World现象 9.内存分配 ...
 - Spring Boot中通过RabbitTemplate主动pull(get)消息的例子
			
import java.util.Properties; import java.util.function.Consumer; import org.slf4j.Logger; import org ...
 - 开源即时通讯IM框架MobileIMSDK的Uniapp端开发快速入门
			
► 相关链接: ①MobileIMSDK-Uniapp端的详细介绍 ② MobileIMSDK-Uniapp端的开发手册new(* 精编PDF版) 一.理论知识准备 您需要对Uniapp和Vue开发有 ...
 - 阿里IM技术分享(九):深度揭密RocketMQ在钉钉IM系统中的应用实践
			
本文由钉钉技术专家尹启绣分享,有修订和重新排版. 1.引言 短短的几年时间,钉钉便迅速成为一款国民级应用,发展速度堪称迅猛. IM作为钉钉最核心的功能,每天需要支持海量企业用户的沟通,同时还通过 Pa ...