有状态转换和无状态转换的区别 Spark Streaming中,如果该操作可以同时对不同批次的数据进行处理,就是有状态转换。如果该操作只能对每个批次中的数据依次进行处理,不同批次之间的数据不进行运算,就是无状态转换。 window的功能 可以跨批次处理窗口内的数据。用于监控某个时间段内数据流量的变化。 代码 window使用需要指定窗口大小和步长。窗口大小和步长只能时采集周期的整数倍。 def main(args: Array[String]): Unit = { val conf: SparkConf = new SparkConf().setAppName(this.getClass.getSimpleName).setMaster("local[*]") val ssc = new StreamingContext(conf,Seconds(3)) //接收数据 val dataDStream: ReceiverInputDStream[String] = ssc.socketTextStream("hadoop01",8888) //设置窗口大小和滑动步长 val windowDStream: DStream[String] = dataDStream.window(Seconds(6),Seconds(3)) //处理数据 val resDStream: DStream[(String, Int)] = windowDStream.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_) resDStream.print() //开启采集 ssc.start() ssc.awaitTermination() }