2021寒假(29)

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

}

  

原文地址:https://www.cnblogs.com/ywqtro/p/14418797.html