1.为何产生window窗口计算? 2.你认为什么情况下使用Window Apply? 3.Window Fold可以用来做什么? 4.window 流是否可以union和join? 5.DataStream是否可以split? 关注最新经典文章,欢迎关注公众号 上一篇: 彻底明白Flink系统学习8:【Flink1.7编程基础】DataStream Transformations介绍 http://www.aboutyun.com/forum.php?mod=viewthread&tid=26445 这篇文章,主要讲windows,那么我们思考为什么会产生windows? 我们前面流式处理,一条条消息处理不行吗?可以的。不过有些场景使用窗口更加适合,比如我们想看10分钟内下单量是多少。那么这时候我们就可以使用窗口计算了。窗口计算是对流式的一个封装,在某个时间内,对这个时间段内的数据一起处理。 理解了什么是windows,我们接着继续: 1.Window KeyedStream → WindowedStream 可以在已经分区的KeyedStream上定义Windows。 Windows根据某些特征(例如,在最近5秒内到达的数据)对每个key中的数据进行分组。 有关窗口的说明,可参考窗口。 [Java] 纯文本查看 复制代码 dataStream.keyBy(0).window(TumblingEventTimeWindows.of(Time.seconds(5))); // Last 5 seconds of data [Scala] 纯文本查看 复制代码 dataStream.keyBy(0).window(TumblingEventTimeWindows.of(Time.seconds(5))) // Last 5 seconds of data 2.WindowAll DataStream → AllWindowedStream Windows可以在常规DataStream上定义。 Windows根据某些特征(例如,在最近5秒内到达的数据)对所有流事件进行分组。 有关窗口的完整说明,可参考windows。 也就是说: 针对全局的不基于某个key进行分组的window的窗口函数的实现 注意:在许多情况下,这是不是并行transformation。 所有记录将收集在windowAll operator 的一个任务中。 [Java] 纯文本查看 复制代码 dataStream.windowAll(TumblingEventTimeWindows.of(Time.seconds(5))); // Last 5 seconds of data [Scala] 纯文本查看 复制代码 dataStream.windowAll(TumblingEventTimeWindows.of(Time.seconds(5))) // Last 5 seconds of data 3.Window Apply WindowedStream → DataStream AllWindowedStream → DataStream 将通用功能应用于window,下面是window元素手工求和 如果是windowAll transformation,你需要替换为 AllWindowFunction [Java] 纯文本查看 复制代码 windowedStream.apply (new WindowFunction<Tuple2<String,Integer>, Integer, Tuple, Window>() { [Scala] 纯文本查看 复制代码 windowedStream.apply { WindowFunction } 4.Window Reduce WindowedStream → DataStream 将函数reduce功能应用于窗口并返回reduce的值。 [Java] 纯文本查看 复制代码 windowedStream.reduce (new ReduceFunction<Tuple2<String,Integer>>() { [Scala] 纯文本查看 复制代码 windowedStream.reduce { _ + _ } 5.Window Fold WindowedStream → DataStream 将功能Fold功能应用于窗口并返回folded 值。 示例函数应用于序列(1,2,3,4,5)时,将序列folded 为字符串“start-1-2-3-4-5”: [Java] 纯文本查看 复制代码 windowedStream.fold("start", new FoldFunction<Integer, String>() { [Scala] 纯文本查看 复制代码 val result: DataStream[String] = 6.windows聚合 WindowedStream → DataStream 聚合窗口的内容。 min和minBy之间的差异是min返回最小值,而minBy返回该字段中具有最小值的元素(max和maxBy相同)。 [Java] 纯文本查看 复制代码 windowedStream.sum(0); [Scala] 纯文本查看 复制代码 windowedStream.sum(0) 上面窗口计算完毕,接着我们介绍新的内容,流和窗口等的结合 7.Union DataStream* → DataStream 两个或多个数据流Union操作,来创建包含来自所有流的所有元素的新流。 注意:如果将数据流与自身union,则会在结果流中每个元素获取两次。 [Java] 纯文本查看 复制代码 dataStream.union(otherStream1, otherStream2, ...); [Scala] 纯文本查看 复制代码 dataStream.union(otherStream1, otherStream2, ...) 8.Window Join DataStream,DataStream → DataStream 给定的key和通用窗口Join两个数据流 [Java] 纯文本查看 复制代码 dataStream.join(otherStream) [Scala] 纯文本查看 复制代码 dataStream.join(otherStream) 9.Interval Join KeyedStream,KeyedStream → DataStream 在给定的时间间隔内使用公共keye ,Join 两个keye流的两个元素e1和e2,以便e1.timestamp + lowerBound <= e2.timestamp <= e1.timestamp + upperBound [Java] 纯文本查看 复制代码 // this will join the two streams so that 10.Window CoGroup DataStream,DataStream → DataStream 在给定key和通用窗口上对两个数据流进行Cogroup。 [Java] 纯文本查看 复制代码 dataStream.coGroup(otherStream) [Scala] 纯文本查看 复制代码 dataStream.coGroup(otherStream) 这里面CoGroup与join他们之间是有关联的,CoGroup可以实现datastream join。 11.Connect DataStream,DataStream → ConnectedStreams “Connect”两个保留类型的数据流。 Connect允许两个流之间的共享状态。 [Java] 纯文本查看 复制代码 DataStream<Integer> someStream = //... [Scala] 纯文本查看 复制代码 someStream : DataStream[Int] = ... 12.CoMap, CoFlatMap ConnectedStreams → DataStream 类似于连接数据流上的map和flatMap [Java] 纯文本查看 复制代码 connectedStreams.map(new CoMapFunction<Integer, String, Boolean>() { [Scala] 纯文本查看 复制代码 connectedStreams.map( 13.Split DataStream → SplitStream 根据某些标准将流拆分为两个或更多个流。 [Java] 纯文本查看 复制代码 SplitStream<Integer> split = someDataStream.split(new OutputSelector<Integer>() { [Scala] 纯文本查看 复制代码 val split = someDataStream.split( 14.Select SplitStream → DataStream 从拆分流中select一个或多个流。 [Java] 纯文本查看 复制代码 SplitStream<Integer> split; [Scala] 纯文本查看 复制代码 val even = split select "even" 15.Iterate DataStream → IterativeStream → DataStream 通过将一个operator的输出重定向到某个先前的operator,在流中创建“feedback”循环。 这对于定义不断更新模型的算法特别有用。 以下代码以流开头并连续应用迭代体。 大于0的元素将被发送回feedback通道,其余元素将向下游转发。 有关完整说明,请参阅迭代。 [Java] 纯文本查看 复制代码 IterativeStream<Long> iteration = initialStream.iterate(); [Scala] 纯文本查看 复制代码 initialStream.iterate { 16.Extract Timestamps DataStream → DataStream 从记录中提取时间戳,以便使用 event time 语义的窗口。 [Java] 纯文本查看 复制代码 stream.assignTimestamps (new TimeStampExtractor() {...}); [Scala] 纯文本查看 复制代码 stream.assignTimestamps { timestampExtractor } |
|小黑屋|about云开发-学问论坛|社区 ( 京ICP备12023829号 )
GMT+8, 2018-12-19 18:58 , Processed in 0.332989 second(s), 29 queries , Gzip On.