当前位置: 首页 > news >正文

沙井网站设计网站建设 博贤科技

沙井网站设计,网站建设 博贤科技,保险资料网站有哪些,计算机个人网站建设论文1.Flink中的KeyBy 在Flink中,KeyBy作为我们常用的一个聚合类型算子,它可以按照相同的Key对数据进行重新分区,分区之后分配到对应的子任务当中去。 源码解析 keyBy 得到的结果将不再是 DataStream,而是会将 DataStream 转换为 Key…

1.Flink中的KeyBy

在Flink中,KeyBy作为我们常用的一个聚合类型算子,它可以按照相同的Key对数据进行重新分区,分区之后分配到对应的子任务当中去。
源码解析
keyBy 得到的结果将不再是 DataStream,而是会将 DataStream 转换为 KeyedStream(键控流),KeyedStream 可以认为是“分区流”或者“键控流”,它是对 DataStream 按照 key 的一个逻辑分区。
所以泛型有两个类型:除去当前流中的元素类型外,还需要指定 key 的类型。
在这里插入图片描述
KeyBy是如何实现分区的呢

Flink中的KeyBy底层其实就是通过Hash实现的,通过对Key的值进行Hash,再做一次murmurHash,取模运算。
再通过Job的并行度,就能获取每个Key应该分配到那个子任务中了。

在这里插入图片描述

2.分组和分区在Flink中的区别

分区:分区(Partitioning)是将数据流划分为多个子集,这些子集可以在不同的任务实例上进行处理,以实现数据的并行处理。
数据具体去往哪个分区,是通过指定的 key 值先进行一次 hash 再进行一次 murmurHash,通过上述计算得到的值再与并行度进行相应的计算得到。
分组:分组(Grouping)是将具有相同键值的数据元素归类到一起,以便进行后续操作(如聚合、窗口计算等)。
key值相同的数据将进入同一个分组中。
注意:数据如果具有相同的key将一定去往同一个分组和分区,但是同一分区中的数据不一定属于同一组。

3.代码示例

package com.flink.DataStream.Aggregation;import org.apache.flink.api.common.RuntimeExecutionMode;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.functions.KeySelector;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;public class FlinkKeyByDemo {public static void main(String[] args) throws Exception {//TODO 创建Flink上下文执行环境StreamExecutionEnvironment streamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment();//设置并行度为1streamExecutionEnvironment.setParallelism(1);//设置执行模式为批处理streamExecutionEnvironment.setRuntimeMode(RuntimeExecutionMode.BATCH);//TODO source 从集合中创建数据源DataStreamSource<String> dataStreamSource = streamExecutionEnvironment.fromElements("hello word", "hello flink");//TODO 方式一 匿名实现类SingleOutputStreamOperator<Tuple2<String, Integer>> outputStreamOperator1 = dataStreamSource.flatMap(new FlatMapFunction<String, String>() {@Overridepublic void flatMap(String s, Collector<String> collector) throws Exception {String[] s1 = s.split(" ");for (String word : s1) {collector.collect(word);}}}).map(new MapFunction<String, Tuple2<String, Integer>>() {@Overridepublic Tuple2<String, Integer> map(String s) throws Exception {Tuple2<String, Integer> aa = Tuple2.of(s, 1);return aa;}})/*** keyBy 得到的结果将不再是 DataStream,而是会将 DataStream 转换为 KeyedStream(键控流)* KeyedStream 可以认为是“分区流”或者“键控流”,它是对 DataStream 按照 key 的一个逻辑分区* 所以泛型有两个类型:除去当前流中的元素类型外,还需要指定 key 的类型。* *//*** 分组和分区在Flink 中具有不同的含义和作用:* 分区:分区(Partitioning)是将数据流划分为多个子集,这些子集可以在不同的任务实例上进行处理,以实现数据的并行处理。*      数据具体去往哪个分区,是通过指定的 key 值先进行一次 hash 再进行一次 murmurHash,通过上述计算得到的值再与并行度进行相应的计算得到。* 分组:分组(Grouping)是将具有相同键值的数据元素归类到一起,以便进行后续操作 (如聚合、窗口计算等)。*      key 值相同的数据将进入同一个分组中。* 注意:数据如果具有相同的key将一定去往同一个分组和分区,但是同一分区中的数据不一定属于同一组。* */.keyBy(new KeySelector<Tuple2<String, Integer>, String>() {@Overridepublic String getKey(Tuple2<String, Integer> stringIntegerTuple2) throws Exception {return stringIntegerTuple2.f0;}}).sum(1);//TODO 方式二 Lamda表达式实现SingleOutputStreamOperator<Tuple2<String, Integer>> outputStreamOperator2 = dataStreamSource.flatMap((String s, Collector<String> collector) -> {String[] s1 = s.split(" ");for (String word : s1) {collector.collect(word);}}).returns(Types.STRING).map((String word) -> {return Tuple2.of(word, 1);})//Java中lamda表达式存在类型擦除.returns(Types.TUPLE(Types.STRING, Types.INT)).keyBy((Tuple2<String, Integer> s) -> {return s.f0;}).sum(1);//TODO sinkoutputStreamOperator1.print("方式一");outputStreamOperator2.print("方式二");//TODO 执行streamExecutionEnvironment.execute("Flink KeyBy Demo");}
}
http://www.yayakq.cn/news/465191/

相关文章:

  • 企业大型网站开发需要多少钱建设工程质量管理条例网站
  • 平台网站怎么做专业网页制作多少钱
  • 网站颜色背景代码华夏润达建设有限公司网站
  • 番禺怎样优化网站建设wordpress注册工具
  • 服装时尚网站比分网站仿站建设
  • 网站开发网站运营怎么做网站内链调整
  • 怎么做淘宝客网站备案网站选服务器文件
  • 餐饮环境评估在哪个网站做网站开发定制模板网站建设
  • 朝阳网站建设开发网站建设需要做什么准备工作
  • 关于网站建设运营的保密协议如何推广宣传一个品牌
  • 网站框架建设越秀公司网站建设
  • 做网站的用多少钱php是世界上最好的语言
  • 中国建设监理协会网站投稿学seo需要多久
  • 梦幻西游网页版官方网站赚钱黑渠道入口
  • 织梦手机网站小程序制作推广
  • 网站流量增加微网站页面菜单栏
  • 域名会影响网站排名吗seo咨询常德
  • 大型门户网站建设功能交易网站建设需要学什么
  • 福建厦门工程建设中心网站代做标书网站
  • 闵行区实验小学长沙seo关键词排名优化
  • 怎样给自己网站做反链外国广告公司网站
  • 海洋优质的网站建设网页设计与网站建设入门到精通
  • 申请网站价格广安做网站的公司
  • 餐饮业手机php网站网站维护运营好做吗
  • 网站建设的费用预算做采集网站的方法
  • 做网站架构电子产品网页设计
  • 建设高端网站公司哪家好wordpress电子邮件
  • 网站首页的布局方式html5做网站的代码
  • 泉州外贸网站建设都有哪些公司沂水住房与城乡建设局网站
  • 珠海网站建设维护seo推广优化外包价格