有状态转换和无状态转换的区别
- 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)
val resDStream: DStream[(String, Int)] = dataDStream.transform(
rdd => {
rdd.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).sortBy(_._2)
}
)
resDStream.print()
ssc.start()
ssc.awaitTermination()
}