updateStateByKey算子入门案例之wordCount

概念

  • 有一个参数,是个函数,该函数有两个参数,第一个是序列类型,第二个是Option类型
def updateStateByKey[S : ClassTag](updateFunc: (Seq[V], Option[S]) => Option[S]): DStream[(K, S)]

updateStateByKey还有其他重载类型,上面这个属于比较简单的一种

案例

以nc作为测试源

nc -lk mypc01 10087

案例代码如下

import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Seconds, StreamingContext}

/**
 * 普通算子不能进行批次之间的聚合
 */
object UpdateBykeyDemo3 extends App {
  private val conf = new SparkConf().setAppName("test").setMaster("local[*]")
    .set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
  private val ssc: StreamingContext = new StreamingContext(conf, Seconds(5))
  ssc.checkpoint("data")
  private val dstream: ReceiverInputDStream[String] = ssc.socketTextStream("mypc01", 10087)
  private val dstream2: DStream[(String, Int)] = dstream.flatMap((_.split(" "))).map((_, 1))
  private val value: DStream[(String, Int)] = dstream2.updateStateByKey(updateFunc)
  value.print()

  ssc.start()
  ssc.awaitTermination()
  def updateFunc(seq:Seq[Int],option: Option[Int]): Option[Int] ={
    println(s"option: $option + seq: ${seq.mkString(",")}")
    Option(seq.sum + option.getOrElse(0))
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭梨山大哎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值