object SparkStreamingTCPTotal {
//newValues 表示当前批次汇总成的(word,1)中相同单词的所有的1
//runningCount 历史的所有相同key的value总和
//newValues:新过来的值
//runningCount:之前保存的状态值
def updateFunction(newValues: Seq[Int], runningCount: Option[Int]): Option[Int] = {
val newCount =runningCount.getOrElse(0)+newValues.sum
Some(newCount)
}
def main(args: Array[String]): Unit = {
//配置sparkConf参数
val sparkConf = new SparkConf().setAppName("SparkStreamingTCPTotal").setMaster("local[2]")
//构建sparkContext对象
val sc = new SparkContext(sparkConf)
sc.setLogLevel("WARN")
//构建StreamingContext对象,每个批处理的时间间隔
val scc = new StreamingContext(sc, Seconds(5))
// scc.checkpoint("./")
//注册一个监听的IP地址和端口 用来收集数据
val lines = scc.socketTextStream("hadoop-senior.test.com", 9999)
//切分每一行记录
val words = lines.flatMap(_.split(" "))
//每个单词记为1
val wordAndOne = words.map((_, 1))
//累计统计单词出现的次数
val result = wordAndOne.updateStateByKey(updateFunction)
result.print()
scc.start()
scc.awaitTermination()
}
}