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()
}
}