zoukankan      html  css  js  c++  java
  • Spark RDD计算每天各省的top3热门广告

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

    样本如下:

    1516609143867 6 7 64 16

    1516609143869 9 4 75 18

    1516609143869 1 7 87 12

     

    package Spark02
    
    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 conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("Practice")
        val sc = new SparkContext(conf)
    
        // 2.读取数据生成RDD
        val line: RDD[String] = sc.textFile("G:\input\agent\agent.log",1)
    
        // 3.按照最小粒度聚合 key=(Province,AD) value=1
        val provinceADtoOne: RDD[((String, String), Int)] = line.map(x => {
          val fields: Array[String] = x.split(" ")
          (((fields(1), fields(4)), 1))
        })
    
        // 4.计算每个省中每个广告被点击次数的总和
        val provinceAdToSum: RDD[((String, String), Int)] = provinceADtoOne.reduceByKey(_+_)
    
        // 5.将省份作为key,广告加点击次数作为value,(Province,(AD,sum))
        val provinceToAdSum: RDD[(String, (String, Int))] = provinceAdToSum.map(x=>(x._1._1,(x._1._2,x._2)))
    
        // 6.将同一个省份的所有广告进行聚合(Province,List((AD1,sum1),(AD2,sum2)))
        val provinceGroup: RDD[(String, Iterable[(String, Int)])] = provinceToAdSum.groupByKey()
    
        // 7.对同一省份的所有广告的集合进行排序并取前三条,排序规则为广告点击总次数
        val result: RDD[(String, List[(String, Int)])] = provinceGroup.mapValues(x => {
          x.toList.sortWith((x, y) => {
            x._2 > y._2
          }).take(3)
        })
    
        // 8.保存结果
    //    result.collect.foreach(println)
          result.saveAsTextFile("output/practice")
    
        sc.stop()
        
      }
    }
    
  • 相关阅读:
    理解MySQL——索引与优化
    ArrayList vs LinkedList vs Vector
    Java集合框架的接口和类层次关系结构图
    Java集合的10个最常见问题
    Mysql 中的事件//定时任务
    Mysql中的函数
    Mysql中的触发器
    Mysql中的存储过程
    Oracle数据库表的一些宏处理
    Oracle查询和过滤重复数据
  • 原文地址:https://www.cnblogs.com/lucas-zhao/p/12069263.html
Copyright © 2011-2022 走看看