Flink入门 - CoGroup和Join
/*
*CoGroup
*/
final StreamExecutionEnvironment streamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<Tuple2<String, String>> dataStream1 = streamExecutionEnvironment.socketTextStream("127.0.0.1", 9000)
.map(new MapFunction<String, Tuple2<String, String>>() {
@Override
public Tuple2<String, String> map(String s) throws Exception {
List<String> strs = Arrays.asList(s.split(" "));
return new Tuple2<>(strs.get(0), strs.get(1));
}
});
DataStream<Tuple2<String, String>> dataStream2 = streamExecutionEnvironment.socketTextStream("127.0.0.1", 9001)
.map(new MapFunction<String, Tuple2<String, String>>() {
@Override
public Tuple2<String, String> map(String s) throws Exception {
List<String> strs = Arrays.asList(s.split(" "));
return new Tuple2<>(strs.get(0), strs.get(1));
}
});
dataStream1.coGroup(dataStream2)
.where(new KeySelector<Tuple2<String, String>, String>() {
@Override
public String getKey(Tuple2<String, String> stringStringTuple2) throws Exception {
return stringStringTuple2.f0;
}
})
.equalTo(new KeySelector<Tuple2<String, String>, String>() {
@Override
public String getKey(Tuple2<String, String> stringStringTuple2) throws Exception {
return stringStringTuple2.f0;
}
})
.window(ProcessingTimeSessionWindows.withGap(Time.seconds(30)))
.trigger(CountTrigger.of(1))
.apply(new CoGroupFunction<Tuple2<String, String>, Tuple2<String, String>, String>() {
@Override
public void coGroup(Iterable<Tuple2<String, String>> first, Iterable<Tuple2<String, String>> second, Collector<String> out) throws Exception {
StringBuilder stringBuilder = new StringBuilder("Data Stream1: \n");
first.forEach(item -> stringBuilder.append(item.f0 + "<=>" + item.f1 + "\n"));
stringBuilder.append("Data Stream2: \n");
second.forEach(item -> stringBuilder.append(item.f0 + "<=>" + item.f1 + "\n"));
out.collect(stringBuilder.toString());
}
}).print();
streamExecutionEnvironment.execute();
/**
* Join
* Join条件为两个流中的数据((String, String))的第一个元素相同
*/
final StreamExecutionEnvironment streamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<Tuple2<String, String>> dataStream1 = streamExecutionEnvironment.fromElements(new Tuple2<>("hello", "flink"));
DataStream<Tuple2<String, String>> dataStream2 = streamExecutionEnvironment.fromElements(new Tuple2<>("hello", "blink"));
dataStream1.join(dataStream2)
.where(new KeySelector<Tuple2<String, String>, String>() {
@Override
public String getKey(Tuple2<String, String> stringStringTuple2) throws Exception {
return stringStringTuple2.f0;
}
})
.equalTo(new KeySelector<Tuple2<String, String>, String>() {
@Override
public String getKey(Tuple2<String, String> stringStringTuple2) throws Exception {
return stringStringTuple2.f0;
}
})
.window(ProcessingTimeSessionWindows.withGap(Time.seconds(30)))
.trigger(CountTrigger.of(1))
.apply(new JoinFunction<Tuple2<String, String>, Tuple2<String, String>, String>() {
@Override
public String join(Tuple2<String, String> first, Tuple2<String, String> second) throws Exception {
return first.f1 + "<=>" + second.f1;
}
}).print();
streamExecutionEnvironment.execute();
// 运行结果
2> flink<=>blink
Flink入门 - CoGroup和Join的更多相关文章
- Flink学习笔记:Operators之CoGroup及Join操作
本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKhaz ...
- Flink入门(五)——DataSet Api编程指南
Apache Flink Apache Flink 是一个兼顾高吞吐.低延迟.高性能的分布式处理框架.在实时计算崛起的今天,Flink正在飞速发展.由于性能的优势和兼顾批处理,流处理的特性,Flink ...
- Flink入门(四)——编程模型
flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink的编程模型. 数据集类型: 无穷数据集:无穷的持续集成的数据集合 有界数据集:有 ...
- Flink入门-第一篇:Flink基础概念以及竞品对比
Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...
- Flink入门(二)——Flink架构介绍
1.基本组件栈 了解Spark的朋友会发现Flink的架构和Spark是非常类似的,在整个软件架构体系中,同样遵循着分层的架构设计理念,在降低系统耦合度的同时,也为上层用户构建Flink应用提供了丰富 ...
- Flink入门(三)——环境与部署
flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink在windows和linux中安装步骤,和示例程序的运行,包括本地调试环境,集群 ...
- 不一样的Flink入门教程
前言 微信搜[Java3y]关注这个朴实无华的男人,点赞关注是对我最大的支持! 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创 ...
- flink 入门
http://ifeve.com/flink-quick-start/ http://vinoyang.com/2016/05/02/flink-concepts/ http://wuchong.me ...
- 第02讲:Flink 入门程序 WordCount 和 SQL 实现
我们右键运行时相当于在本地启动了一个单机版本.生产中都是集群环境,并且是高可用的,生产上提交任务需要用到flink run 命令,指定必要的参数. 本课时我们主要介绍 Flink 的入门程序以及 SQ ...
随机推荐
- C++11版本不能使用一个单行命名空间方式特化一个函数的bug
warning: specialization of ‘template<class _Iterator> struct std::iterator_traits’ in differen ...
- NodeJS包管理器之Yarn
一.安装yarn 首选必须先安装好NodeJS,之后可以去yarn官网下载mis安装程序安装.由于NodeJS自带了一个包管理器npm,所以安装yarn更简单的方法是直接使用npm install - ...
- 浅入深出ETCD之【集群部署与golang客户端使用】
前言 之前说了etcd的简介,命令行使用,一些基本原理.这次来说说现实一点的集群部署和golang版本的客户端使用.因为在实际使用过程中,etcd的节点肯定是需要2N+1个进行部署的,所以有必要说明一 ...
- MSYS 工具和TOOLCHAIN的配置
博客转载:https://blog.csdn.net/hunterhuang2013/article/details/70880569 1. MSYS2 自带的开发环境,安装的包叫 msys2-dev ...
- PHP 动态输出 svgz 格式图片
使用PHP动态生成SVGZ图片(gzip压缩的SVG) 经测试SVG的动画性能很差,简单的动画CPU都能占到 30%左右. 可能的用途: 动态天气图片 访问统计计数图片 文字验证生成 动态头像 静态外 ...
- Linux(CentOS)安装JDK1.8
1.JDK的RPM包安装方式: https://www.cnblogs.com/hunttown/p/5450463.html 2.JDK的tar包安装方式: 首先,从SUN公司网站下载最新的JDK ...
- VMware设置桥接模式(使虚拟机拥有独立IP访问外网)
1.关闭虚拟机里的系统 2.VMware主窗口 编辑---->虚拟网络编辑器 右下角----> 更改设置---->出现 桥接模式 桥接到:看本机所连接的网络, 网络属性中有一项“描 ...
- docker试水
1.清理旧版本yum remove docker \ docker-common \ docker-selinux \ ...
- 自动以读写方式挂载ntfs(新)-苹果之路
之前的mac下挂载ntfs磁盘的方法在新版本的macos下失效了:<自动以读写方式挂载ntfs-黑苹果之路>,现提供一个有效的方法,系统版本:白苹果10.14.6,参见<Mac OS ...
- Windows SVN迁移到Linux 服务器
一.备份VisualSVN项目 1. 现在要使用Linux作为svn服务器,之前是在windows Server 2008上的,用的是VisualSVN, 如下图所示. 2. 现在svn中有一个项目f ...