转载Flink Keyed Windows函数:ProcessWindowFunction ,ReduceFunction ,AggregateFunction ,FoldFunction

本文详细介绍了Apache Flink中的四种Keyed Window函数:ProcessWindowFunction效率较低,全窗口数据会被传递;ReduceFunction简单易用,推荐使用;AggregateFunction适用于复杂逻辑,可优化;FoldFunction作为过时API,不那么友好。同时提到了无Key的ProcessAllWindowFunction,由于性能问题不常被采用。
摘要由CSDN通过智能技术生成

此文案例问转载:https://www.cnblogs.com/maoxiangyi/p/10978028.html

1. ProcessWindowFunction  效率低,整个窗口的数据都会被传递给算子,代码如下:

import org.apache.flink.api.common.functions.AggregateFunction
import org.apache.flink.api.scala._
import org.apache.flink.streaming.api.functions.source.SourceFunction
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.streaming.api.scala.function.ProcessWindowFunction
import org.apache.flink.streaming.api.windowing.time.Time
import org.apache.flink.streaming.api.windowing.windows.TimeWindow
import org.apache.flink.util.Collector

/**
 * @author: create by maoxiangyi
 * @version: v1.0
 * @description: window
 * @date:2019 /6/4
 */
object ProcessWordCount {
 def main(args: Array[String]): Unit = {
  //设置环境
  val env: StreamExecutionEnvironment = StreamExecutionEnvironment.createLocalEnvironment()
  //设置数据源
  env.addSource(new SourceFunction[String] {
   override def run(ctx: SourceFunction.SourceContext[String]): Unit = {
    while (true) {
     ctx.collect("hello hadoop hello storm hello spark")
     Thread.sleep(1000)
    }
   }

   override def cancel(): Unit = {}
  })
   //计算逻辑
   .flatMap(_.split(" "))
   .map((_, 1))
   .keyBy(_._1)
   .timeWindow(Time.seconds(10), Time.seconds(10))
   
   .process(new ProcessWindowFunction[(String, Int), (String, Int), String, TimeWindow] {
    override def process(key: String, context: Context, elements: Iterable[(String, Int)], out: Collector[(String, Int)]): Unit = {
    
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值