前言
本文主要讲解下窗口函数:ReduceFunction,AggregateFunction,ProcessWindowFunction
ReduceFunction
是个增量计算的算子,数据来一条算一条,要求入参和出参类型一致这个要求导致条件苛刻。没有aggregate好用~
直接看代码:模拟订单,计算10s滚动窗口订单金额~~~使用起来比较简单的
package com.realtime.flink.function
import com.realtime.flink.dto.OrderDto
import com.realtime.flink.source.OrderSource
import org.apache.flink.api.common.functions.ReduceFunction
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.assigners.{
GlobalWindows, TumblingEventTimeWindows, TumblingProcessingTimeWindows}
import org.apache.flink.streaming.api.windowing.time.Time
/**
* 注意:reduce不能直接用Double,会报错
* 数据时增量计算,来一条算一条
*/
object ReduceFunctionTest {
def main(args: Array[String]): Unit = {
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.getConfig.setParallelism(1)
env.addSource(new OrderSource)
.windowAll(TumblingProcessingTimeWindows.of(Time.seconds(10)))
.reduce(new ReduceFunction[OrderDto] {
override def reduce(value1: OrderDto, value2: OrderDto): OrderDto = {
value1.setOrderPrice(value1.getOrderPrice+value2.getOrderPrice)
value1
}
})
.map(x=>{
println(x.getOrderPrice)
}