Spark RDD--2 計算日誌相關資料
阿新 • • 發佈:2019-01-05
需求:
日誌格式:
IP 命中率 響應時間 請求時間 請求方法 請求URL 請求協議 狀態嗎 響應大小 referer 使用者代理
1、計算每一個IP的訪問次數
(114.55.227.102,9348)
2、計算每一個視訊訪問的IP數
視訊:141081.mp4 獨立IP數:2393
3、統計每小時CDN的流量
00時 CDN流量=14G
計算方案:(註釋部分為分佈執行,未註釋部分為一步執行)
package com.jiangnan.spark import java.text.SimpleDateFormat import java.util.Date import com.jiangnan.spark.Test09052.sc import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object Test1 extends App { val conf = new SparkConf().setAppName("").setMaster("local[2]") val sc = new SparkContext(conf) // val lines: RDD[String] = sc.textFile("E:\\cdn.txt") // val ips: RDD[String] = lines.map(_.split(",")(1)) // val ip: RDD[(String, Int)] = ips.map((_, 1)) // val reduced: RDD[(String, Int)] = ip.reduceByKey(_ + _) // val sort = reduced.sortBy(_._2) // sort.saveAsTextFile("E:\\out.txt") sc.textFile("E:\\0905\\cdn.txt").map(_.split(",")(1)).map((_, 1)).reduceByKey(_ + _).sortBy(_._2).saveAsTextFile("E:\\0905\\IP1") sc.stop() } object Test2 extends App { val conf = new SparkConf().setAppName("").setMaster("local[2]") val sc = new SparkContext(conf) // val lines: RDD[String] = sc.textFile("E:\\0905\\cdn.txt") // private val line: RDD[Array[String]] = lines.map(_.split(",")) // private val value: RDD[((String, String), Int)] = line.map(i => ((i(0), i(1)), 1)).distinct() // private val res: RDD[(String, Int)] = value.map(i => ((i._1._1), 1)).reduceByKey(_ + _) // res.sortBy(_._2).saveAsTextFile("E:\\0905\\IP2") // var j = 1 // for (i <- res if j < 10) { // j += 1 // println("視訊:"+i._1 + ".mp4" + " 獨立IP數:" + i._2) // } sc.textFile("E:\\0905\\cdn.txt").map(_.split(",")).map(i => ((i(0),i(1)),1)).distinct().map(i => ((i._1._1),1)).reduceByKey(_+_).sortBy(_._2).saveAsTextFile("E:\\0905\\IP2") sc.stop() } object Test3 extends App { //待更新最佳方案 }