Flink 窗口聚合函数之ReduceFunction实践
一、ReduceFunction的概念
Flink使用ReduceFunction来对窗口中的元素进行增量聚合。要求输入和输出的数据类型一致,定义了如何把两个输入的元素进行合并来生成相同类型的输出元素的过程。
二、案例实践:每隔5秒统计通话日志的数量
1.日志数据对象
case class Log(sid:String,var callOut:String, var callIn:String, callType:String, callTime:Long, duration:Long)
2.统计
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.windowing.time.Time/*** 增量聚合函数*/
/*** 业务需求:每隔5秒统计每个通话的日志数量*/
object TestReduceFunctionByWindow {def main(args: Array[String]): Unit = {val env = StreamExecutionEnvironment.getExecutionEnvironment// 数据源var stream = env.socketTextStream("flink101", 8888).map(line => {var arr = line.split(",")// 转成日志对象Log(arr(0).trim,arr(1).trim, arr(2).trim, arr(3).trim, arr(4).trim.toLong, arr(5).trim.toLong)})val result = stream.map(log=> (log.sid, 1)).keyBy(_._1).timeWindow(Time.seconds(5)).reduce((t1,t2) => (t1._1, t1._2 + t2._2)) // 输入和输出数据类型一致// 打印测试result.print()env.execute("TestReduceFunctionByWindow")}
}
三、总结
使用ReduceFunction能够快速对两个相同类型的数据元素按照指定的方法进行聚合逻辑,实现sum功能。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
