其他分享
首页 > 其他分享> > 大数据Spark入门案例5–统计广告点击数量排行Top3(scala版本)

大数据Spark入门案例5–统计广告点击数量排行Top3(scala版本)

作者:互联网

大数据Spark入门案例5–统计每广告点击数量排行Top3(scala版本)

1 数据准备

链接:https://pan.baidu.com/s/1afzmL-hNsAJl1_gx_dH2ag
提取码:yybi
在这里插入图片描述
agent.log:时间戳,省份,城市,用户,广告,中间字段使用空格分隔。

2 需求分析

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

  1. 首先将获取的数据进行切分,挑选需要的参数:省份+广告
  2. 以省份和广告位为key,统计当前省份当前广告观看次数sum
  3. 按省份进行分类
  4. 排序输出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