Flink的mapWithState示例及源码分析

Flink的状态函数mapWithState使用,代码如下:

 def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment

    env.fromCollection(List(
      (1L, 3L),
      (1L, 5L),
      (1L, 7L),
      (1L, 4L),
      (1L, 2L),
      (2L, 7L),
      (2L, 4L),
      (2L, 2L)
    )).keyBy(_._1)
      .mapWithState[(Long,Long),(Long,Long)]((in:(Long,Long),count:Option[(Long,Long)]) =>
        count match {
          case Some(c)=>((in._1,in._2+c._2),Some(in._1+c._1,in._2+c._2))
          case None => ( (in._1, in._2), Some(in._1,in._2) )
        }
      )
      .print()
    // the printed output will be (1,4) and (1,5)

    env.execute("ExampleManagedState")
  }

结果:
在这里插入图片描述
下面看一下keyStream.mapWithState在这里插入图片描述
1.首先看一下有3个输入泛型1函数
1.R: TypeInformation (return返回类型)
2.S: TypeInformation (stateful状态类型)
3.T(输入类型)
4.fun: (T, Option[S]) => (R, Option[S]) 函数将输入泛型转化了R,状态泛型没有变化
2.mapper扩展了RichMapFunction类并实现了StatefulFunction特质,里面的map方法实际调用的是StatefulFunction特质的applyWithState。由于StatefulFunction特质已经定义一个私有变量ValueState[S]并且更新状态
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值