updateStateByKey算子和CheckPoint的使用题
应用场景
以词频统计为例,一个简单的词频只会分析出当前这一个批次的单词数,也就是说:
第一次输入 a a a b 会输出 ( a,3 b,1 );
第二次输入 a a a b 还是会输出 ( a,3 b,1 );
可是更多的应用场景是需要把这些数据累加起来,就是让他输出 ( a,6 b,2 )
其实这个也好实现,
方法一: 你可以借用Mysql,在每一次得到输入的参数的时候,去Mysql中找到对应的数据, 进行累加,再写回Mysql。或者是其他地方
方法二:可以借用Redis 缓存,暂时存到Redis中。然后计算。 但是这样也不能长期保存。
这两种方法都用一定的局限性,所以就引出了updateStateByKey CheckPoint
import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.DStream
import org.apache.spark.streaming.{Seconds, StreamingContext}
/**
* 使用Spark Streaming完成有状态统计
*/
object StatefulWordCount {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setAppName("StatefulWordCount").setMaster("local[2]")
val ssc = new StreamingContext(sparkConf, Seconds(5))
/