版权声明:未经同意,不得转载。 https://blog.csdn.net/qq_36235275/article/details/82502075
需求:
日志格式:
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 {
//待更新最佳方案
}