大数据Spark入门案例5–统计广告点击数量排行Top3(scala版本)
作者:互联网
大数据Spark入门案例5–统计每广告点击数量排行Top3(scala版本)
1 数据准备
链接:https://pan.baidu.com/s/1afzmL-hNsAJl1_gx_dH2ag
提取码:yybi
agent.log:时间戳,省份,城市,用户,广告,中间字段使用空格分隔。
2 需求分析
统计出每一个省份每个广告被点击数量排行的 Top3
- 首先将获取的数据进行切分,挑选需要的参数:省份+广告
- 以省份和广告位为key,统计当前省份当前广告观看次数sum
- 按省份进行分类
- 排序输出top3数据
3 功能实现
以下代码可以逐步执行并输出,查看输出数据类型和含义
package com.root.opeartor
import org.apache.spark.{SparkConf, SparkContext}
object test {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local").setAppName("RDD")
val sc = new SparkContext(sparkConf)
val data = sc.textFile("data/agent.log")
//省份位于切割字符第1个,广告位于第4个
//转换数据格式((省份,广告),1),方便统计当前省份当前广告的数量
val testdata = data.map(line => {
val datas = line.split(" ")
((datas(1), datas(4)),1)
})
//将相同key(省份,广告)的value相加,统计相同key总量
val testdata1 = testdata.reduceByKey(_ + _)
//转化数据形式((省份,广告),sum)-->((省份,(广告,sum)),方便分组
val testdata2 = testdata1.map(k => {(k._1._1, (k._1._2, k._2))})
//将相同省份key进行分组
val testdata3 = testdata2.groupByKey()
//对每个省份内部的广告点击数进行排序,并取排行前三的广告
val testdata4 = testdata3.mapValues(iter => {iter.toList.sortBy(_._2)(Ordering.Int.reverse).take(3)})
//对省份进行排序
val testdata5 = testdata4.sortByKey()
testdata5.collect().foreach(println)
}
}
4 输出
标签:val,scala,sum,Top3,广告,key,._,Spark,省份 来源: https://blog.csdn.net/qq_42754919/article/details/117957828