Spark RDD--2 计算日志相关数据

版权声明:未经同意,不得转载。 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 {
 //待更新最佳方案
}

猜你喜欢

转载自blog.csdn.net/qq_36235275/article/details/82502075