1)数据准备
agent.log:时间戳,省份,城市,用户,广告,中间字段使用空格分隔。
2)需求描述
统计出每一个省份每个广告被点击数量排行的Top3
// 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)