目标需求:根据网站访问日志的到访问量最高的页面
数据格式:
import org.apache.spark.{SparkConf, SparkContext}
//需求:根据网站访问日志的到访问量最高的页面
object MyWebLogCount {
def main(args: Array[String]): Unit = {
//开发过程采用local模式,消除bug再打包部署
//定义一个SparkConf(配置参数)
val conf = new SparkConf().setAppName("WebLogCount").setMaster("local[2]")
//创建一个SparkContext对象
val sc = new SparkContext(conf)
//读入数据
val rdd1 = sc.textFile("D:\\temp\\webpagedata.txt")
.map(line=>{
//首先得到: GET /MyDemoWeb/hadoop.jsp HTTP/1.1
val index1 = line.indexOf("\"") //第一个双引号的位置
val index2 = line.lastIndexOf("\"") //第二个双引号的位置
val line1 = line.substring(index1+1,index2)
//得到: /MyDemoWeb/hadoop.jsp
val index3 = line1.indexOf(" ")
val index4 = line1.lastIndexOf(" ")
val line2 = line1.substring(index3+1,index4)
//得到网页的名字:hadoop.jsp
val jspName = line2.substring(line2.lastIndexOf("/")+1)
//返回:(jspname,1)
(jspName,1)
})
//按照key进行累加,得到每个网页访问的总量
val rdd2 = rdd1.reduceByKey(_+_) // 结果:(hadoop.jsp,5)
//g根据累加结果排序
val rdd3 = rdd2.sortBy(_._2,false)
//打印访问量最高的网页
println(rdd3.take(2).toBuffer)
sc.stop()
}
}