无状态转换保作与有状态转换操作
1.无状态转换操作:
无状态转换操作仅处理当前时间跨度内的数据,不涉及跨批次的数据处理。
2.有状态转换操作:
有状态转换操作可以跨批次处理数据,允许将不同批次的数据放在一起进行处理。
主要涉及两种操作:updatestateByKey和Windowoperations。
update StateByKey
1.功能:
updateStateByKey 用于记录历史记录,跨批次维护状态。
适用于需要对所有输入数据进行累加或其他状态维护的场景。
2.使用步骤:
定义状态:状态可以是任意数据类型。
定义状态更新函数:根据新的事件更新每一个键对应的状态。
Window Operations
1.功能:
window operations 用于设置窗口大小和滑动窗口的间隔,动志获取流数据的状态。
适用于需要在固定时间窗口内进行数据统计的场景。
2.参数:
窗口时长:规定每次计算的时间范围。
滑动步长:规走触发计算的间隔时间。
窗口时长和滑动步长必须是采集周期大小的整数倍。
DStream输出
常见输出方式:打印在控制台上,保存为文本文件,序列化为Java对象,结合RDD进行输出。
注意:
1 连接不能写在 driver 层面(序列化)。
2 如果写在 foreach 则每个 RDD 中的每一条数据都创建,得不偿失;
3 增加 foreachPartition,在分区创建(获取)。