1)数据准备
agent.log:时间戳,省份,城市,用户,广告,中间字段使用空格分隔。
2)需求描述
统计出每一个省份每个广告被点击数量排行的Top3
/** agent.log:
*时间戳,省份,城市,用户,广告,中间字段使用空格分隔。
*/
// TODO 需求: 统计出每一个省份 广告被点击数量排行的Top3
val agentRdd = sc.textFile("Input/sparkCore/agent.log")
agentRdd
.map(line=>{
val datas = line.split(" ")
((datas(1),datas(4)),1) //((省份,广告),1)
})
.reduceByKey(_+_) //((省份,广告),sum)
.map{
case ((pro,ad),sum) =>
(pro,(ad,sum)) //(省份,(广告,sum))
}
.groupByKey() //(省份,iterator((广告,sum),(广告,sum),...))
.mapValues(iter =>{
iter.toList.sortBy(_._2)(Ordering.Int.reverse).take(3) //降序排列 取前三
}) // (省份,top3(广告,sum))
.collect().foreach(println)