Spark RDD算子实例——统计广告点击量 Top3

1、数据准备

数据结构:时间戳,省份,城市,用户,广告,中间字段使用空格分隔。

数据样式如下:

1516609143867 6 7 64 16
1516609143869 9 4 75 18
1516609143869 1 7 87 12
1516609143869 2 8 92 9
1516609143869 6 7 84 24
1516609143869 1 8 95 5
1516609143869 8 1 90 29
1516609143869 3 3 36 16
1516609143869 3 3 54 22
1516609143869 7 6 33 5
1516609143869 8 2 91 27
1516609143869 0 5 66 5
1516609143869 1 3 33 6
1516609143869 6 2 97 21
1516609143869 5 2 95 24
1516609143869 8 9 73 11
1516609143869 4 8 62 15
1516609143869 5 5 40 23
1516609143869 6 6 53 17
1516609143869 3 0 86 21
1516609143869 4 6 1 11
1516609143869 3 6 49 7
1516609143869 8 3 4 18
1516609143869 8 8 69 14
1516609143869 0 6 51 29
1516609143869 5 3 59 2
1516609143869 8 4 66 25
1516609143869 3 4 63 9

2、需求

统计出每一个省份广告被点击次数的 TOP3

3、代码实现

import org.apache.spark.rdd.RDD
import org.apache.spark.{
    
    SparkConf, SparkContext}
//需求:统计出每一个省份广告被点击次数的 TOP3
object Practice {
    
    

	 def main(args: Array[String]): Unit = {
    
    
	 //1.初始化 spark 配置信息并建立与 spark 的连接
	 val sparkConf = new SparkConf().setMaster("local[*]").setAppName("Test")
	 val sc = new SparkContext(sparkConf)
	 //2.读取数据生成 RDD:TS,Province,City,User,AD
	 val line = sc.textFile("E:\\IDEAWorkSpace\\SparkTest\\src\\main\\resources\\agent.log")
	 //3.按照最小粒度聚合:((Province,AD),1)
	 val provinceAdAndOne = line.map {
    
     x =>
	 val fields: Array[String] = x.split(" ")
	 ((fields(1), fields(3)), 1)
	 }
	
//4.计算每个省中每个广告被点击的总数:((Province,AD),sum)
	 val provinceAdToSum = provinceAdAndOne.reduceByKey(_ + _)
	 //5.将省份作为 key,广告加点击数为 value:(Province,(AD,sum))
	 val provinceToAdSum = provinceAdToSum.map(x => (x._1._1, (x._1._2, x._2)))
	 //6.将同一个省份的所有广告进行聚合(Province,List((AD1,sum1),(AD2,sum2)...))
	 val provinceGroup = provinceToAdSum.groupByKey()
	 //7.对同一个省份所有广告的集合进行排序并取前 3 条,排序规则为广告点击总数
	 val provinceAdTop3 = provinceGroup.mapValues {
    
     x =>
	 x.toList.sortWith((x, y) => x._2 > y._2).take(3)
	 }
	 //8.将数据拉取到 Driver 端并打印
	 provinceAdTop3.collect().foreach(println)
	 //9.关闭与 spark 的连接
	 sc.stop()
	 }

}
	

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43520450/article/details/108581414