rdd案例:排行的top3计算

    技术2023-12-17  72

    需求:统计出每一个省份每个广告被点击数量排行的Top3

    package com.baidu.exer import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.rdd.RDD object Top3 { def main(args: Array[String]): Unit = { // 1516609143867 6 7 64 16 // 时间戳 省份 城市 用户 广告 val sparkConf: SparkConf = new SparkConf().setAppName("zk").setMaster("local") val sparkContext = new SparkContext(sparkConf) // TODO 1. 读取数据文件,获取原始数据 val fileRDD: RDD[String] = sparkContext.textFile("input/agent.log") // TODO 2. 将读取的数据进行结构的转换 val mapRDD: RDD[(String, Int)] = fileRDD.map( line => { val datas: Array[String] = line.split(" ") (datas(1) + "-" + datas(4), 1) } ) // TODO 3. 将转换结构后的数据进行分组聚合00000 val reduceRDD: RDD[(String, Int)] = mapRDD.reduceByKey(_ + _) // TODO 4. 将聚合后的数据进行结构的转换 val mapRDD1: RDD[(String, (String, Int))] = reduceRDD.map { case (k, cnt) => { val ks: Array[String] = k.split("-") (ks(0), (ks(1), cnt)) } } // TODO 5. 将转换结构后的数据根据省份进行分组 val groupRDD: RDD[(String, Iterable[(String, Int)])] = mapRDD1.groupByKey() // TODO 6. 将分组后的数据进行排序,取前三名 val sRDD: RDD[(String, List[(String, Int)])] = groupRDD.mapValues( iter => { iter.toList.sortWith( (left, right) => { left._2 > right._2 } ).take(3) } ) sRDD.collect().foreach(println) sparkContext.stop() } }

    部分数据:

    1516609143869 5 3 59 2 1516609143869 8 4 66 25 1516609143869 3 4 63 9 1516609143869 0 8 8 15 1516609143869 0 6 91 17 1516609143869 0 1 18 24 1516609143869 1 4 44 15 1516609143869 1 3 54 13 1516609143869 1 3 30 3 1516609143871 9 6 65 11 1516609143871 0 9 9 19 1516609143871 4 0 32 20 1516609143871 2 1 28 26 1516609143871 5 2 68 24 1516609143871 8 6 58 3 1516609143871 6 7 95 14 1516609143871 7 2 33 27 1516609143871 4 1 16 13 1516609143871 2 2 68 28 1516609143871 5 0 71 19 1516609143871 8 5 66 7 1516609143871 4 4 31 0 1516609143871 9 9 79 18 1516609143871 9 0 69 10 1516609143871 9 6 92 4 1516609143871 8 1 41 4 1516609144913 1 3 87 28 1516609144913 8 0 2 5 1516609144913 5 9 46 23 1516609144913 4 0 7 24 1516609144913 9 5 99 11 1516609144913 7 1 36 16 1516609144913 2 3 96 13 1516609144913 3 1 31 10 1516609144913 0 9 20 27 1516609144913 2 9 41 19 1516609144913 3 3 21 19 1516609144913 3 2 19 28 1516609144913 6 3 61 9 1516609144913 8 1 83 27 1516609144913 9 0 26 20 1516609144913 2 1 38 11 1516609144913 5 6 52 7 1516609144913 6 6 80 19 1516609144913 4 9 83 6 1516609144913 9 1 13 0 1516609144913 4 6 36 26 1516609144913 5 4 20 17 1516609144913 6 9 6 4 1516609144913 7 4 88 22 1516609144913 6 6 99 22 1516609144913 2 9 9 4 1516609144913 6 6 62 8 1516609144913 2 1 62 5 1516609144913 4 3 4 23 1516609144913 7 2 90 26 1516609144913 3 4 17 9 1516609144913 2 5 64 14 1516609144913 1 5 57 3 1516609144913 3 9 36 14 1516609144913 4 3 49 9 1516609144913 5 7 37 15 1516609144913 9 2 28 1 1516609144913 6 3 74 3 1516609144913 9 9 93 27 1516609144913 6 7 67 22 1516609144913 5 0 53 24 1516609144913 9 1 68 27 1516609144913 0 0 99 5 1516609144913 0 6 22 15 1516609144913 7 3 54 6 1516609144913 2 8 47 26 1516609144913 3 1 19 2 1516609144913 2 6 12 21 1516609144913 0 4 65 27 1516609144913 1 4 69 3 1516609144913 5 1 50 14 1516609145936 7 8 28 12 1516609145936 5 0 4 26 1516609145936 5 4 80 20 1516609145936 8 7 87 0 1516609145936 0 2 18 19 1516609145936 1 7 84 7 1516609145936 2 0 41 22 1516609145936 8 2 60 15 1516609145936 8 5 44 15 1516609145936 0 9 17 9 1516609145936 6 3 28 5 1516609145936 6 7 85 28 1516609145936 7 6 70 18 1516609145936 7 1 97 12 1516609145936 1 3 35 23 1516609145936 7 7 19 1 1516609145936 6 4 29 27 1516609145936 5 3 12 7 1516609145936 7 7 40 16 1516609145936 1 4 18 11 1516609145936 0 5 6 11 1516609145936 5 1 90 22 1516609145936 3 0 73 22 1516609145936 6 1 7 15 1516609145936 7 0 49 6 1516609145936 4 3 5 7 1516609145936 7 6 79 20 1516609145936 5 0 83 22 1516609145936 4 3 82 1 1516609145936 5 1 68 27 1516609145936 7 8 9 12 1516609145936 4 5 49 8 1516609145936 6 9 27 18 1516609145936 8 0 37 26 1516609145936 1 7 17 11 1516609145936 4 8 91 29 1516609145936 0 6 98 1 1516609145936 7 6 23 0 1516609145936 0 8 54 8 1516609145936 8 2 76 18 1516609145936 1 4 86 29 1516609145936 1 9 95 10 1516609145936 3 7 49 7 1516609145936 5 1 42 11 1516609145936 5 3 19 9 1516609145936 5 2 78 11 1516609145937 1 4 80 4 1516609145937 8 6 25 7 1516609145937 1 6 56 1 1516609145937 5 7 60 27 1516609145937 0 5 85 27 1516609146961 6 6 19 5 1516609146961 8 8 6 21 1516609146961 8 2 57 25 1516609146961 3 5 87 15 1516609146961 6 7 38 3 1516609146961 1 0 22 19 1516609146961 6 9 76 11 1516609146961 2 2 4 1 1516609146961 6 2 17 27 1516609146961 6 8 98 12 1516609146961 4 8 78 21 1516609146961 4 6 17 13 1516609146961 7 6 51 20 1516609146961 3 2 99 6 1516609146961 1 8 44 28 1516609146961 6 6 0 24 1516609146961 7 8 77 8 1516609146961 7 5 96 22 1516609146961 9 4 42 12 1516609146961 9 7 75 8 1516609146961 3 2 95 26 1516609146961 6 0 88 28 1516609146961 4 2 53 2 1516609146961 5 3 56 17 1516609146961 9 6 98 13 1516609146961 8 9 25 28 1516609146961 0 4 5 15 1516609146961 4 2 16 18 1516609146961 9 2 75 26 1516609146961 5 9 17 4 1516609146961 3 5 34 25 1516609146961 2 2 74 17 1516609146961 0 7 62 24 1516609146961 8 1 52 20 1516609146961 6 6 18 21 1516609146961 8 1 80 24 1516609146961 8 4 3 10 1516609146961 1 3 46 4 1516609146961 0 3 17 8 1516609146961 9 8 82 14 1516609146961 4 8 67 16 1516609146961 5 7 81 13 1516609146961 3 2 62 13 1516609146961 4 7 63 0 1516609146961 3 1 30 26 1516609146961 5 8 64 5 1516609146961 2 7 32 19 1516609146961 1 2 2 28 1516609146961 2 7 14 17 1516609146961 6 7 65 20 1516609146961 1 2 73 16 1516609147979 6 7 24 7 1516609147979 7 4 8 4 1516609147979 0 6 78 7 1516609147979 3 5 48 29 1516609147979 0 7 42 8 1516609147979 3 5 24 0 1516609147979 5 1 74 2 1516609147979 9 4 15 8 1516609147979 7 0 29 7 1516609147979 5 0 97 24 1516609147979 3 6 19 23 1516609147979 3 6 40 14 1516609147979 8 1 0 4 1516609147979 3 1 28 14 1516609147979 5 1 60 19 1516609147979 8 5 83 15 1516609147979 0 1 31 2 1516609147979 4 5 25 27 1516609147979 7 4 74 4 1516609147979 3 5 92 0 1516609147979 6 9 40 18 1516609147979 1 8 36 12 1516609147979 8 8 43 5 1516609147979 8 0 32 10 1516609147979 6 0 20 22 1516609147979 5 5 86 17 1516609147979 6 6 73 29 1516609147979 5 5 43 27 1516609147979 6 7 37 7 1516609147979 8 3 68 28 1516609147979 6 1 42 5 1516609147979 6 6 86 13 1516609147979 7 7 18 14 1516609147979 7 9 26 26 1516609147979 5 8 54 23 1516609147979 4 6 25 13 1516609147979 0 2 22 20 1516609147979 0 5 29 25 1516609147979 6 9 14 26 1516609147979 2 2 33 14 1516609147979 5 0 34 17 1516609147979 0 5 69 6 1516609147979 0 8 6 5 1516609147979 7 7 26 0 1516609147979 7 9 86 23 1516609147979 5 6 30 18 1516609147979 8 3 95 13 1516609147979 9 9 90 25 1516609147979 3 8 39 28 1516609147979 5 0 21 27 1516609147979 9 6 1 1 1516609148997 0 3 70 2 1516609148997 2 8 85 10 1516609148997 4 7 76 6 1516609148997 6 3 79 22 1516609148997 2 3 26 22 1516609148997 0 9 63 18 1516609148997 0 2 69 23 1516609148997 2 0 33 17 1516609148997 8 9 25 18 1516609148997 8 5 37 25 1516609148997 1 7 81 18 1516609148997 1 5 92 1 1516609148997 6 8 67 12 1516609148997 6 4 31 7 1516609148997 3 0 9 6 1516609148997 7 6 20 18 1516609148997 6 1 45 27 1516609148997 0 4 18 20 1516609148997 6 8 17 9 1516609148997 7 3 80 29 1516609148997 0 2 99 19 1516609148997 4 4 30 17 1516609148997 5 4 13 23 1516609148997 5 2 94 10 1516609148997 0 1 1 10 1516609148997 1 5 72 7 1516609148997 3 5 42 5 1516609148997 6 5 79 12 1516609148997 8 5 37 10 1516609148997 6 6 84 1 1516609148997 7 1 49 19 1516609148997 3 1 9 15 1516609148997 1 3 46 10 1516609148997 9 3 43 6 1516609148997 4 8 77 12 1516609148997 9 4 63 20 1516609148997 5 0 30 1 1516609148997 6 7 70 3 1516609148997 8 4 76 22 1516609148997 4 9 16 9 1516609148997 3 5 0 11 1516609148997 3 2 16 27 1516609148997 0 5 70 22 1516609148997 9 9 30 20 1516609148997 1 7 54 18 1516609148997 3 4 51 10 1516609148997 0 1 63 18 1516609148997 2 5 64 7 1516609148997 4 8 39 0 1516609148997 2 9 47 15 1516609148997 7 0 73 23 1516609150012 2 7 95 6 1516609150012 5 1 26 15 1516609150012 1 5 89 2 1516609150012 8 5 33 8 1516609150012 7 7 60 23 1516609150012 2 6 7 13
    Processed: 0.027, SQL: 9