广告统计top3(一)

数据字段: 时间戳 省份 城市 userId adId
需求: 求每一个省份的点击广告的top3

package com.jxlg.RDD

import org.apache.spark.{
    
    SparkConf, SparkContext}

/**
 * 数据字段: 时间戳   省份   城市   userId  adId
 * 需求: 求每一个省份的点击广告的top3
 */
object AdventTop3_1 {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val conf = new SparkConf()
    conf.setAppName("top3统计")
    conf.setMaster("local[3]")
    val sc = new SparkContext(conf)

    val logs = sc.textFile("hdfs://192.168.157.132:9000/user/hdfs/add.txt")
    val logArr = logs.map(_.split("\t"))
    //提取需求分析的数据
    val  provinceAndAdId=logArr.map(x=> (x(1)+"_"+x(4),1))
    //将每一个省份的对应的广告点击量进行统计
    val aggrProvinceAndId = provinceAndAdId.reduceByKey(_+_)
    //为了方便接下来进行省份的分组并组内排序,需要数据进行整合
    val provinceAndAdIdTup = aggrProvinceAndId.map(tup => {
    
    
      val splited=tup._1.split("_")
      val province = splited(0)
      val adId =splited(1)
      (province,adId,tup._2)
    })
    //按照省份进行分组
    val groupedPro = provinceAndAdIdTup.groupBy(_._1)
    //组内排序
    val res = groupedPro.mapValues(x => x.toList.sortWith(_._3>_._3).take(3))

    println(res.collect.toBuffer)
    sc.stop()

  }

}

猜你喜欢

转载自blog.csdn.net/qq_42706464/article/details/108307160