1. 程式人生 > >Spark RDD--2 計算日誌相關資料

Spark RDD--2 計算日誌相關資料

需求:

日誌格式:
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 {
 //待更新最佳方案
}