有状态转化操作
UpdateStateByKey:用于在DStream中跨批次维护状态,构建由(键,状态)对组成的新DStream。使用时需定义状态及状态更新函数,前者可为任意数据类型,后者明确如何基于新事件和之前状态更新。代码中,通过 updateFunc 实现对单词计数的累加更新,将当前批次值累加并与之前状态值相加。同时,使用 updateStateByKey 需配置检查点目录保存状态,保障状态信息的持久化和可恢复性,适用于需追踪历史数据的场景,如实时统计单词出现总数。
Window Operations:通过设置窗口时长和滑动步长动态获取当前Streaming的状态。窗口时长规定计算内容的时间范围,滑动步长决定计算触发频率,且二者必须是采集周期的整数倍。代码示例中,利用 reduceByKeyAndWindow 函数对单词计数进行窗口计算,每12秒计算一次,每6秒滑动一次窗口,可用于实时分析一段时间内数据的变化趋势,如统计一段时间内热门词汇的出现频率。
DStream输出操作:DStream输出操作决定对流数据转化结果的处理方式。若未执行输出操作,相关DStream不会求值,StreamingContext也无法启动。
print():在驱动节点打印DStream每批次数据的前10个元素,方便开发调试时快速查看数据处理中间结果。
文件存储操作:包括 saveAsTextFiles 、 saveAsObjectFiles 和 saveAsHadoopFiles ,分别以文本文件、Java对象序列化的SequenceFiles和Hadoop文件形式存储数据,文件名包含前缀、时间戳和可选后缀,便于按批次存储和管理数据。
foreachRDD(func):最通用的输出操作,可对每个RDD执行任意计算,常用于将数据写入外部系统。但要注意避免在driver层面创建连接,否则会因序列化问题出错;也不应在 foreach 中为每条数据创建连接,这样资源消耗大。推荐在 foreachPartition 中创建连接,提升效率 。