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

建设黑彩网站外贸专业网站制作

建设黑彩网站,外贸专业网站制作,网站备案号和查询的不一样,手表网网站文章目录 8.1 窗口联结#xff08;Window Join#xff09;8.2 **间隔联结#xff08;Interval Join#xff09;** 8.1 窗口联结#xff08;Window Join#xff09; Flink为基于一段时间的双流合并专门提供了一个窗口联结算子#xff0c;可以定义时间窗口#xff0c;并… 文章目录 8.1 窗口联结Window Join8.2 **间隔联结Interval Join** 8.1 窗口联结Window Join Flink为基于一段时间的双流合并专门提供了一个窗口联结算子可以定义时间窗口并将两条流中共享一个公共键key的数据放在窗口中进行配对处理。 package org.example.watermark;import org.apache.flink.api.common.eventtime.WatermarkStrategy; import org.apache.flink.api.common.functions.JoinFunction; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.api.java.tuple.Tuple3; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; import org.apache.flink.streaming.api.windowing.time.Time;public class WindowJoinDemo {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();env.setParallelism(1);SingleOutputStreamOperatorTuple2String, Integer ds1 env.fromElements(Tuple2.of(a, 1),Tuple2.of(a, 2),Tuple2.of(b, 3),Tuple2.of(c, 4)).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple2String, IntegerforMonotonousTimestamps().withTimestampAssigner((value, ts) - value.f1 * 1000L));SingleOutputStreamOperatorTuple3String, Integer, Integer ds2 env.fromElements(Tuple3.of(a, 1, 1),Tuple3.of(a, 11, 1),Tuple3.of(b, 2, 1),Tuple3.of(b, 12, 1),Tuple3.of(c, 14, 1),Tuple3.of(d, 15, 1)).assignTimestampsAndWatermarks(WatermarkStrategy.Tuple3String, Integer, IntegerforMonotonousTimestamps().withTimestampAssigner((value, ts) - value.f1 * 1000L));// TODO window join// 1. 落在同一个时间窗口范围内才能匹配// 2. 根据keyby的key来进行匹配关联// 3. 只能拿到匹配上的数据类似有固定时间范围的inner joinDataStreamString join ds1.join(ds2).where(r1 - r1.f0) // ds1的keyby.equalTo(r2 - r2.f0) // ds2的keyby.window(TumblingEventTimeWindows.of(Time.seconds(10))).apply(new JoinFunctionTuple2String, Integer, Tuple3String, Integer, Integer, String() {/*** 关联上的数据调用join方法* param first ds1的数据* param second ds2的数据* return* throws Exception*/Overridepublic String join(Tuple2String, Integer first, Tuple3String, Integer, Integer second) throws Exception {return first ----- second;}});join.print();env.execute();} }其实仔细观察可以发现窗口join的调用语法和我们熟悉的SQL中表的join非常相似 SELECT * FROM table1 t1, table2 t2 WHERE t1.id t2.id; 这句SQL中where子句的表达等价于inner join … on所以本身表示的是两张表基于id的“内连接”inner join。而Flink中的window join同样类似于inner join。也就是说最后处理输出的只有两条流中数据按key配对成功的那些如果某个窗口中一条流的数据没有任何另一条流的数据匹配那么就不会调用JoinFunction的.join()方法也就没有任何输出了。 8.2 间隔联结Interval Join 间隔联结的原理 间隔联结具体的定义方式是我们给定两个时间点分别叫作间隔的“上界”upperBound和“下界”lowerBound于是对于一条流不妨叫作A中的任意一个数据元素a就可以开辟一段时间间隔[a.timestamp lowerBound, a.timestamp upperBound],即以a的时间戳为中心下至下界点、上至上界点的一个闭区间我们就把这段时间作为可以匹配另一条流数据的“窗口”范围。所以对于另一条流不妨叫B中的数据元素b如果它的时间戳落在了这个区间范围内a和b就可以成功配对进而进行计算输出结果。所以匹配的条件为 a.timestamp lowerBound b.timestamp a.timestamp upperBound 这里需要注意做间隔联结的两条流A和B也必须基于相同的key下界lowerBound应该小于等于上界upperBound两者都可正可负间隔联结目前只支持事件时间语义。 如下图所示我们可以清楚地看到间隔联结的方式 下方的流A去间隔联结上方的流B所以基于A的每个数据元素都可以开辟一个间隔区间。我们这里设置下界为-2毫秒上界为1毫秒。于是对于时间戳为2的A中元素它的可匹配区间就是[0, 3],流B中有时间戳为0、1的两个元素落在这个范围内所以就可以得到匹配数据对2, 0和2, 1。同样地A中时间戳为3的元素可匹配区间为[1, 4]B中只有时间戳为1的一个数据可以匹配于是得到匹配数据对3, 1)。 所以我们可以看到间隔联结同样是一种内连接inner join。与窗口联结不同的是interval join做匹配的时间段是基于流中数据的所以并不确定而且流B中的数据可以不只在一个区间内被匹配。 stream1.keyBy(KeySelector).intervalJoin(stream2.keyBy(KeySelector)).between(Time.milliseconds(-2), Time.milliseconds(1)).process (new ProcessJoinFunctionInteger, Integer, String(){Overridepublic void processElement(Integer left, Integer right, Context ctx, CollectorString out) {out.collect(left , right);}});处理迟到数据 //2. 调用 interval join OutputTagTuple2String, Integer ks1LateTag new OutputTag(ks1-late, Types.TUPLE(Types.STRING, Types.INT)); OutputTagTuple3String, Integer, Integer ks2LateTag new OutputTag(ks2-late, Types.TUPLE(Types.STRING, Types.INT, Types.INT));SingleOutputStreamOperatorString process ks1.intervalJoin(ks2).between(Time.seconds(-2), Time.seconds(2)).sideOutputLeftLateData(ks1LateTag) // 将 ks1的迟到数据放入侧输出流.sideOutputRightLateData(ks2LateTag) // 将 ks2的迟到数据放入侧输出流.process(new ProcessJoinFunctionTuple2String, Integer, Tuple3String, Integer, Integer, String() {/*** 两条流的数据匹配上才会调用这个方法* param left ks1的数据* param right ks2的数据* param ctx 上下文* param out 采集器* throws Exception*/Overridepublic void processElement(Tuple2String, Integer left, Tuple3String, Integer, Integer right, Context ctx, CollectorString out) throws Exception {// 进入这个方法是关联上的数据out.collect(left ------ right);}});process.print(主流); process.getSideOutput(ks1LateTag).printToErr(ks1迟到数据); process.getSideOutput(ks2LateTag).printToErr(ks2迟到数据);env.execute();
http://www.hkea.cn/news/14288133/

相关文章:

  • 网站建设不完整什么意思学生网站作品
  • 网站源码带数据网页设计师的能力
  • 百度推广登录账号首页移动网站 做优化
  • 免费网站建设朋友交流帮小公司代账一个月费用
  • 网站被flashfxp 上传网站
  • 仙桃网站制作州国wordpress同步微博内容
  • 网站做多久能盈利加强网站人才建设
  • 青岛网站推广怎么选wordpress api post
  • 好看开源企业网站模板吉安哪里做网站
  • 搭建企业网站的步骤在百度上怎么搜到自己的网站
  • 安论坛网站建设郑州app制作
  • 网站团队人数网站开发一个页面多少钱
  • 网站站外推广方式有哪些怎么免费制作一个网站
  • 网站图片优化器网站代码 公告栏 php
  • 手机端网站开发企业电子商务网站有哪些
  • 怎么建公司网站教程郑州自助建站模板
  • 网站备案变更主体电话游戏网站 模板
  • 上传了网站标志 功能链接用记事本制作html网页
  • 南宁建设网站上海市网站seo
  • 聊城制作手机网站ui培训班出来能找到工作吗
  • 商业源码网seo网站优化网站编辑招聘
  • 个人网站域名选择网站怎么做才
  • 网站建设电脑配置万网账户
  • 雄安优秀网站建设电话网站后台从哪里进去
  • 电子元器件在哪个网站上做媒体营销
  • 网站建设是系统工程品牌推广公司
  • 百度网站推广价格免费查询企业电话
  • 关于网站内容建设的正确说法如何做360购物网站
  • 网站建设需要那些基础做公司网站的公
  • 重庆永川网站建设报价台州网站建设咨询薇