1. updateStateByKey操作,可以让我们为每个key维护一份state,并持续不断的更新该state1、首先,要定义一个state,可以是任意的数据类型;
    2. 2、其次,要定义state更新函数——指定一个函数如何使用之前的state和新值来更新state
    3. 对于每个batchSpark都会为每个之前已经存在的key去应用一次state更新函数,无论这个keybatch中是否有新的数据。如果state更新函数返回none,那么key对应的state就会被删除。
    4. 当然,对于每个新出现的key,也会执行state更新函数。
    5. 注意,updateStateByKey操作,要求必须开启Checkpoint机制。
    6. 案例:基于缓存的实时wordcount程序(在实际业务场景中,这个是非常有用的)