首页 > 其他 > 详细

在Spark中完成PV与UV的计算,重在源代码

时间:2017-02-12 14:20:56      阅读:181      评论:0      收藏:0      [点我收藏+]

1.代码

 1 object LogPVAndUV{
 2     def main(args:Array[String]):Unit={
 3         val conf=new SparkConf()
 4             .setMaster("local[*]")
 5             .setAppName("PVAndUV")
 6         val sc=SparkContext.getOrCreate(conf)
 7         val logPath="/user/beifeng/spark/logs/page_views.data"
 8         val logRDD=sc.textFile(logPath)
 9         val filterRDD=logRDD.filter(_.length>0)
10         //转换
11         val mapRDD=filterRDD.map(line=>{
12             val arr=line.split("\t")
13             if(arr.length==7){
14                 val date=arr(0).trim
15                 val url=arr(1)
16                 val uuid=arr(2)
17                 (date.subString(0,Math.min(10.date.length)).trim,url,uuid)
18             }else{
19                 (null,null,null)
20             }
21         }).filter(tuple=>tuple._1!=null&&tuple._1.length>0)
22         //PV计算
23         val pvRDD=mapRDD
24             .filter(tuple=>tuple._2.length>0)
25             .map(tuple=>(tuple._1,1))
26             .reduceByKey(_+_)
27         //UV计算
28         val uvRDD=mapRDD
29             .filter(tuple=>tuple._3.length>0)
30             .map(tuple=>(tuple._1,tuple._3))
31             .distinct
32             .reduceByKey(_+_)
33         //合并
34         val pvAndUv=pvRDD.join(uvRDD).map{
35             case (date,(pv,uv))=>{
36                 (date,pv,uv)
37             }
38         }
39         //输出
40         pvAndUv.saveAsTextFile("/user/beifeng/spark/output/"+System.currentTimeMillis())
41         sc.stop()
42     }
43 }

 

在Spark中完成PV与UV的计算,重在源代码

原文:http://www.cnblogs.com/juncaoit/p/6390866.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!