1. 程式人生 > >使用Spark進行搜狗日誌分析實例——統計每個小時的搜索量

使用Spark進行搜狗日誌分析實例——統計每個小時的搜索量

360安全衛士 返回 用戶 sogo user 順序 contex 讀取文件 key

 1 package sogolog
 2 
 3 import org.apache.spark.rdd.RDD
 4 import org.apache.spark.{SparkConf, SparkContext}
 5 
 6 /**
 7   * 統計每小時搜索次數
 8   */
 9 /*
10 搜狗日誌示例
11 訪問時間(時:分:秒)    用戶ID                [查詢詞]        該URL在返回結果中的排名    用戶點擊的順序號    用戶點擊的URL
12 00:00:00    2982199073774412    [360安全衛士]    8 3    download.it.com.cn/softweb/software/firewall/antivirus/20067/17938.html
13 00:00:00 07594220010824798 [哄搶救災物資] 1 1 news.21cn.com/social/daqian/2008/05/29/4777194_1.shtml 14 00:00:00 5228056822071097 [75810部隊] 14 5 www.greatoo.com/greatoo_cn/list.asp?link_id=276&title=%BE%DE%C2%D6%D0%C2%CE%C5 15 00:00:00 6140463203615646 [繩藝] 62 36 www.jd-cd.com/jd_opus/xx/200607/706.html 16 */ 17
object CountByHours { 18 def main(args: Array[String]): Unit = { 19 20 //1、啟動spark上下文、讀取文件 21 val conf = new SparkConf().setAppName("sougo count by hours").setMaster("local") 22 val sc = new SparkContext(conf) 23 var orgRdd = sc.textFile("C:\\Users\\KING\\Desktop\\SogouQ.reduced\\SogouQ.reduced")
24 println("總行數:"+orgRdd.count()) 25 26 //2、map操作,遍歷處理每一行數據 27 var map:RDD[(String,Integer)] = orgRdd.map(line=>{ 28 //拿到小時 29 var h:String = line.substring(0,2) 30 (h,1) 31 }) 32 33 //3、reduce操作,將上面的 map結果按KEY進行合並、疊加 34 var reduce:RDD[(String,Integer)] = map.reduceByKey((x,y)=>{ 35 x+y 36 }) 37 38 //打印出按小時排序後的統計結果 39 reduce.sortByKey().collect().map(println) 40 } 41 }

運行結果:

技術分享圖片

搜狗日誌下載地址:http://www.sogou.com/labs/resource/q.php

使用Spark進行搜狗日誌分析實例——統計每個小時的搜索量