現有某網站的網站日誌,內容爲用戶對網站的請求,包含user ID、IP address、datetime……等等web
另有一份文件中包含用戶的帳戶詳細信息數據,包含User ID、creation date、first 、last name等等數組
一、統計每位用戶的請求次數網站
// 一、從文件建立一個RDD,每行爲一個元素,*讀取目錄下全部文件 val mydata=sc.textFile("hdfs:/loudacre/weblogs/*") // 二、分組數據 val mydata1=mydata.map(line => line.split(" ")) // 三、構造K-V,Pair RDD val mydata2=mydata1.map(line =>(line(2),1)) // 四、統計用戶的請求次數 val mydata3=mydata2.reduceByKey((v1,v2)=> v1 + v2)
二、統計相同請求次數的用戶spa
// 一、轉置,將次數與用戶id互換位置,方便使用countByKey獲得一個map結構 val mydata4=mydata3.map(line=>(line._2,line._1)) // 二、計算相同請求次數的用戶 val myresult1=mydata4.countByKey()
三、統計用戶訪問的IP地址日誌
// 一、構建用戶:IP Pair RDD val mydata5=mydata1.map(line =>(line(2),line(0))) // 二、統計用戶訪問的IP地址 val myresult2=mydata5.groupByKey()
四、關聯兩個文件,獲得用戶的訪問次數code
RDD格式:blog
userid1 6 Rick Hopper
userid2 8 Lucio Arnold
userid3 2 Brittany Parrottci
// 一、引入數據,建立一個RDD,每行爲一個元素
val mydata6=sc.textFile("hdfs:/loudacre/accounts/*") // 二、分組數據,獲得數組
val mydata7=mydata6.map(line=>line.split(",")) // 三、構建結構
val mydata8=mydata7.map(line=>(line(0),line)) // 四、鏈接數據
val myresult3=mydata8.join(mydata3) // 五、格式化輸出
for( line <- myresult3.take(10)){ printf("%s %s %s %s\n",line._1,line._2._2,line._2._1(3),line._2._1(4))}