一、依赖

参考博文: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");
}
}

随机推荐

  1. JDocumentEditor

    package infonode; /** * * @author sony */ //JDocumentEditor.java import java.awt.*; import java.awt. ...

  2. golang之项目部署

    介绍 Go 语言可以使用内置命令行工具 go build 编译生成可执行文件.自 Go1.5 版本开始实现自举后,交叉编译也很方便,只需使用 GOOS.GOARCH 环境变量指定目标平台和架构. 部署 ...

  3. linux 软连接使用

    转载请注明出处: 在Linux系统中,软连接(Symbolic Link)是一种特殊类型的文件链接,类似于Windows系统中的快捷方式.它允许用户通过一个文件路径访问另一个文件或目录,而不需要拥有原 ...

  4. PythonDay8Advance

    PythonDay8Advance 正则表达式 本身也是一个字符串,其中的字符具有特殊含义,将来我们可以根据这个字符串[正则表达式]去处理其他的字符串,比如可以对其他字符串进行匹配,切分,查找,替换等 ...

  5. 鸿蒙UI开发快速入门 —— part10: PersistentStorage与Environment

    1.前言 我们在鸿蒙UI开发快速入门 -- part09: 应用级状态管理LocalStorage & AppStorage中已经学习了LocalStorage与AppStorage,但他们都 ...

  6. vscode代码注释插件koroFileHeader配置(自用)

    前言 一直以来写注释都是让人头疼的问题,力求保持注释风格统一也很麻烦,偶然间发现的这款vscode中的注释插件koroFileHeader,配置好后可以大大提高写注释的效率与积极性♪(∇*) 安装插件 ...

  7. Jetpack Compose学习(15)——Pager组件的使用(对标ViewPager)

    原文地址: Jetpack Compose学习(15)--Pager组件的使用(对标ViewPager)-Stars-One的杂货小窝 从名字可以看出,Pager这个就是ViewPager的替代产物 ...

  8. Flutter问题 Flutter MissingPluginException(No implementation found for method xxx on channel xxx)

    问题如题 有时候项目跑着跑着突然控制台就报了这个错,用hot restart也没有用,问题的本质是plugin没有找到,这时候有两种方法 flutter clean,会将依赖清除,这时候再重新pub ...

  9. .NET 8 中的 ASP.NET Core 指标与 Grafana 仪表板入门

    .NET 8 中的 ASP.NET Core 指标与 Grafana 仪表板入门 原文地址:https://devblogs.microsoft.com/dotnet/introducing-aspn ...

  10. 渗透测试-前端加密分析之RSA加密登录(密钥来源服务器)

    本文是高级前端加解密与验签实战的第6篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过RSA加密来爆破登录. 分析 这里的代码跟上文的类似,但是加密的公钥是通过请求服 ...