import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} ////统计每个省份每个广告被点击量排行的top3=>(省份,广告),点击量) object Spark24Top3AD { def main(args: Array[String]): Unit = { val conf=new SparkConf().setMaster("local[*]").setAppName("Operator") val sc=new SparkContext(conf) val data=sc.textFile("data/agent.log") //1.提取数据 val mapRDD=data.map({ line=> { val datas=line.split(" ") //原始数据:时间戳,省份,城市,用户,广告 ((datas(1),datas(4)),1) } }) //2.统计,分组聚合 val reduce:RDD[((String,String),Int)]=mapRDD.reduceByKey(_+_) //3.转换结构,按省份统计 val newRDD=reduce.map{ case ((prv,ad),sum)=>(prv,(ad,sum)) } //4.按省份分组 val gruop=newRDD.groupByKey() //5.将分组后的数据排序,取各省前三 val result=gruop.mapValues( iter=>iter.toList.sortBy(_._2)(Ordering.Int.reverse).take(3) //降序 ) result.collect().foreach(println) sc.stop() } }