数据字段: 时间戳 省份 城市 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()
}
}