第五章_Spark核心编程_Rdd_转换算子_keyValue型_(需求)统计出每一个省份每个广告被点击数量排行的 Top3
1. 需求说明
/* * 数据文件(用户点击行为数据) : * agent.log:时间戳,省份,城市,用户,广告,中间字段使用空格分隔 * 需求1 : * 统计出每一个省份每个广告被点击数量排行的 Top3 * 按 省份、广告 分组,统计指标为点击次数 * * */
2. 代码示例
object Test1 extends App { val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("distinctTest") val sc: SparkContext = new SparkContext(sparkconf) private val rdd: RDD[String] = sc.textFile("Spark_319/src/data/input/agent.log") //1.切割数据,获取省份和广告 //输出 key=省份 广告 value=1 private val rdd1: RDD[(String, Int)] = rdd.map( e => (e.split(" ")(1) + "_" + e.split(" ")(4), 1) ) //2. key=省份_广告 reduce private val rdd2: RDD[(String, Int)] = rdd1.reduceByKey(_ + _) //3. 输出 key=省份 value=广告,cnt private val rdd3: RDD[(String, (String, Int))] = rdd2.map( e => (e._1.split("_")(0), (e._1.split("_")(1), e._2)) ) //4. 根据 key=省份 分组 value=iter(广告,cnt) private val rdd4: RDD[(String, Iterable[(String, Int)])] = rdd3.groupByKey //5. 根据 value=iter(广告,cnt) 的cnt排序,并获取前3 private val rdd5 = rdd4.map( tp => ( tp._1 , tp._2.toList.sortWith(_._2 > _._2).take(3) ) ) rdd5.collect().foreach(println(_)) sc.stop() }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界