Spark 2.x管理与开发-【Spark基础编程案例】案例一:求网站的访问量

一、Tomcat的访问日志

二、要求

求出访问量最高的两个网页

要求显示:网页名称、访问量

三、代码实现

package coreExamples

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

/**
 * Spark Core案例-1
 * 求网站的访问量-求出访问量最高的两个网页
 */
object MyTomcatLogCount {
  //本质就是WordCount
  def main(args: Array[String]): Unit = {
    //首先,创建SparkContext对象
    val conf = new SparkConf().setMaster("local").setAppName("MyTomcatCount")
    val sc = new SparkContext(conf)
    /**
     * 读入日志解析
     * 192.168.88.1 - - [30/Jul/2017:12:54:42 +0800] "GET /MyDemoWeb/web.jsp HTTP/1.1" 200 239
     * (web.jsp,1)
     */
    val rdd1 = sc.textFile("D:/大数据高级资料及测试/Spark Core案例数据/localhost_access_log.2017-07-30.txt")
      .map(
        line => {
          //一、解析字符串

          //1.得到两个引号之间的东西
          val index1 = line.indexOf("\"")
          val index2 = line.lastIndexOf("\"")
          //GET /MyDemoWeb/web.jsp HTTP/1.1
          val line1 = line.substring(index1 + 1, index2)

          //2.得到两个空格之间的东西
          val index3 = line1.indexOf(" ")
          val index4 = line1.lastIndexOf(" ")
          ///MyDemoWeb/web.jsp
          val line2 = line1.substring(index3, index4)

          //3.得到jsp名字
          //web.jsp
          val jspName = line2.substring(line2.lastIndexOf("/") + 1)

          //4.返回jsp名字并计数
          (jspName, 1)
        })
    //二、整合
    //1.将相同Key的value进行累加汇总
    val rdd2 = rdd1.reduceByKey(_ + _)
    //2.按照value排序
    val rdd3 = rdd2.sortBy(_._2, false)
    //3.取出访问量中最高的两个网页
    rdd3.take(2).foreach(println)
    sc.stop()
  }
}

四、运行结果

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3