FLink12--KeyByReduceApp
一、依赖
参考博文:https://www.cnblogs.com/robots2/p/16048648.html
二、代码
package net.xdclass.class9;
import java.util.Date;
import org.apache.flink.api.common.RuntimeExecutionMode;
import org.apache.flink.api.common.functions.ReduceFunction;
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 net.xdclass.model.VideoOrder;
/**
* @desc reduce算子,和sum类似,sum做简单聚合,reduce做复杂聚合
* aggregate支持更复杂聚合
* @menu
*/
public class FLink12KeyByReduceApp {
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.fromElements(
new VideoOrder("20190242812", "springboot教程", 10,1001, new Date()),
new VideoOrder("20194350812", "微服务SpringCloud", 20,1001, new Date()),
new VideoOrder("20190814232", "Redis教程", 30,1001, new Date()),
new VideoOrder("20190523812", "⽹⻚开发教程", 40,1001, new Date()),
new VideoOrder("201932324", "百万并发实战Netty", 50,1001, new Date()),
new VideoOrder("20190242812", "springboot教程", 10,1001, new Date()),
new VideoOrder("20190814232", "Redis教程", 30,1001, new Date()));
KeyedStream<VideoOrder, Object> videoOrderObjectKeyedStream = ds.keyBy(new KeySelector<VideoOrder, Object>() {
@Override
public Object getKey(VideoOrder videoOrder) throws Exception {
return videoOrder.getTitle();
}
});
//reduce,做聚合。合并数据,返回新的聚合对象。大于两条才会触发
SingleOutputStreamOperator<VideoOrder> reduceResult = videoOrderObjectKeyedStream.reduce(
new ReduceFunction<VideoOrder>() {
@Override
public VideoOrder reduce(VideoOrder value1, VideoOrder value2) throws Exception {
VideoOrder reduceOrder = new VideoOrder();
reduceOrder.setTitle(value1.getTitle());
reduceOrder.setMoney(value1.getMoney() + value2.getMoney());
return reduceOrder;
}
});
reduceResult.print();
//DataStream需要调用execute,可以取个名称
env.execute("reduce map job");
}
}
随机推荐
- golang之jwt
golang-jwt是go语言中用来生成和解析jwt的一个第三方库.本文中使用目前最新的v5版本. 安装 go get -u github.com/golang-jwt/jwt/v5 在代码中引用 i ...
- CudaSPONGE高性能GPU分子模拟
技术背景 CudaSPONGE是基于CUDA C开发的一款纯GPU分子动力学模拟软件,具有模块化和高性能的特点.官方基本介绍内容如下: 分子动力学(Molecular Dynamics, MD)模拟是 ...
- Nginx HttpHeader增加几个关键的安全选项
针对像德勤这样的专业渗透测试(Pentest)的场景中,为了确保网站的安全性并通过严格的安全审查,需要为这些安全头配置更细致.专业的参数. 以下是对每个选项的建议以及设置值的详细说明: 1. Stri ...
- idea properties文件乱码解决
java文件是好的,但是遇到properties文件,默认就成了iso制式乱码了. 虽说不影响程序执行,但是看起来真的让人心烦. 问题点是出在properties文件是GBK的,需要单独设置一下. ...
- 埃尼阿克ENIAC与计算机发展,及信息技术发展史
一.埃尼阿克ENIAC 第二次世界大战期间,国军方为了研发新型的大炮和导弹,设立了"弹道研究实验室".实验室为了计算炮弹弹道,用了200多人加班加点进行计算,速度依感无法达到军方要 ...
- 关于 Span 的一切:探索新的 .NET 明星: 4. Span<T> 和 Memory<T> 是如何与 .NET 库集成的?
4. Span<T> 和 Memory<T> 是如何与 .NET 库集成的? 1. Span<T> 是什么? 2. Span<T> 是如何实现的? 3. ...
- 共建共荣金融生态!金融级数字底座“源启”与GoldenDB数据库完成互认证
近日,中电金信金融级数字底座"源启"顺利与金篆信科GoldenDB分布式数据库完成互认证.GoldenDB数据库安全稳定运行在"源启"之上,整体性能表现卓越,进 ...
- Qt/C++开发经验小技巧306-310
远程过很多人电脑远程分析问题,发现一个通病,比如明明修改了某个数据库或者配置文件,结果运行程序一看,还是旧的数据,死活都不行,查了半天程序,始终找不到问题所在.最终查到原来是程序读取的文件根本不是修改 ...
- 国产系统中标麒麟neokylin上的可视化大屏电子看板系统
一.功能特点 采用分层设计,整体总共分三级界面,一级界面是整体布局,二级界面是单个功能模块,三级界面是单个控件. 子控件包括饼图.圆环图.曲线图.柱状图.柱状分组图.横向柱状图.横向柱状分组图.合格率 ...
- 综述😋Security and Privacy Challenges of ✌Large Language Models A Survey