SparkStream(二)

有状态和无状态

无状态:仅限对收集周期内数据进行处理
有状态:将本次收集周期与前面的所有收集周期获得的数据统一进行处理,两个周期内的数据合并过程类似于SparkSQL中自定义聚合函数的buffer。

窗口函数

window operations可以设置窗口的大小和华东窗口的间隔来动态的获取当前Streaming的允许状态。基于窗口的操作会在一个比StreamingContext的批次间隔更长的时间范围内,通过整合多个批次的结果,计算出整个窗口的结果。

//scala中的窗口函数
    val ints = List(1, 2, 3, 4)
    val iterator = ints.sliding(2)
    for (elem <- iterator) {
      println(elem)
    }

    //spark中的窗口函数
    val conf: SparkConf = new SparkConf().setAppName("111").setMaster("local[*]")
    val context = new StreamingContext(conf, Seconds(3))
    var line = KafkaUtils.createStream(context,"192.168.0.107:2181","zqz",Map("zqz"->3))
    //窗口大小应该为采集周期的整数倍,窗口滑动步长也为采集周期的整数倍
    line.window(Seconds(6),Seconds(3))

    val value = line.flatMap(t => t._2.split(" ")).map((_, 1)).reduceByKey((_ + _))


    context.start()
    context.awaitTermination()

Trasform

允许DStream上执行任意的RDD-to-RDD函数,即使这些函数并没有在DStream的API中暴露出来,通过该函数可以方便的扩展Spark API。该函数每一批次调度一次。其实也就是对DStream中的RDD应用转换。

Join

连接操作,可以连接Stream-Stream,windows-Stream to windows-Stream、Stream-dataset

原文地址:https://www.cnblogs.com/zqzhen/p/12876397.html