在之前的案例中,实现的DStream是通过每个采集周期内独立进行逻辑处理的,在某些业务场景中,可能是需要将每个周期内的计算结果进行汇总,这时就需要一种有状态的采集。
package test.wyh.streaming
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
object StreamingStateWordCount {
def main(args: Array[String]): Unit = {
//创建环境对象
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("StreamingStateWordCount")
//配置采集周期
val context = new StreamingContext(sparkConf, Seconds(2))
//配置检查点目录,就是记录状态的目录,该目录是不存在的,自动生成
context.checkpoint("DStream_checkpoit")
//监听端口,获取到的是行数据
val lines = context.socketTextStream("localhost", 9000)
//分词
val words = lines