有状态转换和无状态转换的区别 Spark Streaming中,如果该操作可以同时对不同批次的数据进行处理,就是有状态转换。如果该操作只能对每个批次中的数据依次进行处理,不同批次之间的数据不进行运算,就是无状态转换。 transform功能 可以对每个批次中的DStream封装的RDD进行操作,可以直接使用RDD的算子。 代码 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) //transform处理DStream每个批次中的RDD val resDStream: DStream[(String, Int)] = dataDStream.transform( rdd => { //统计词频并排序 rdd.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).sortBy(_._2) } ) resDStream.print() //开启采集 ssc.start() //等待采集完成 ssc.awaitTermination() }