Spark _10_统计网站pv和uv

你离开我真会死。 提交于 2019-12-02 12:55:01

统计网站pv和uv

PV是网站分析的一个术语,用以衡量网站用户访问的网页的数量。对于广告主,PV值可预期它可以带来多少广告收入。一般来说,PV与来访者的数量成正比,但是PV并不直接决定页面的真实来访者数量,如同一个来访者通过不断的刷新页面,也可以制造出非常高的PV。

1、什么是PV值

PV(page view)即页面浏览量或点击量,是衡量一个网站或网页用户访问量。具体的说,PV值就是所有访问者在24小时(0点到24点)内看了某个网站多少个页面或某个网页多少次。PV是指页面刷新的次数,每一次页面刷新,就算做一次PV流量。

度量方法就是从浏览器发出一个对网络服务器的请求(Request),网络服务器接到这个请求后,会将该请求对应的一个网页(Page)发送给浏览器,从而产生了一个PV。那么在这里只要是这个请求发送给了浏览器,无论这个页面是否完全打开(下载完成),那么都是应当计为1个PV。

2、什么是UV值

UV(unique visitor)即独立访客数,指访问某个站点或点击某个网页的不同IP地址的人数。在同一天内,UV只记录第一次进入网站的具有独立IP的访问者,在同一天内再次访问该网站则不计数。UV提供了一定时间内不同观众数量的统计指标,而没有反应出网站的全面活动。

数据信息:

 

实例1:

访问pv

package ddd.henu.pvuv
​
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
​
object PvScala {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("pv")
    val sc = new SparkContext(conf)
    sc.setLogLevel("error")
​
    val lines: RDD[String] = sc.textFile("./data/pvuvdata")
​
    val tup: RDD[(String, Int)] = lines.map(line => {
      new Tuple2(line.split("\t")(5), 1)
    })
​
    val result = tup.reduceByKey((v1:Int,v2:Int) => {v1+v2})
​
    result.foreach(println)
​
  }
}

简写并排序:

       lines.map(line=>{(line.split("\t")(5),1)}).reduceByKey((v1:Int,v2:Int)=>{
          v1+v2
        }).sortBy(tp=>{tp._2},false).foreach(println)

运行结果:

(www.suning.com,18547) (www.gome.com.cn,18550) (www.jd.com,18478) (www.dangdang.com,18587) (www.taobao.com,18467) (www.mi.com,18454) (www.baidu.com,18475)

实例2:

统计uv:

lines.map(line=>{line.split("\t")(0)+"_"+line.split("\t")(5)})
          .distinct()
          .map(one=>{(one.split("_")(1),1)})
          .reduceByKey(_+_)
          .sortBy(_._2,false)
          .foreach(println)

结果:

(www.dangdang.com,15726)
(www.suning.com,15637)
(www.baidu.com,15586)
(www.gome.com.cn,15576)
(www.jd.com,15571)
(www.taobao.com,15567)
(www.mi.com,15534)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!