使用Spark计算PV、UV

日志字段格式:

id,ip,url,ref,cookie,time_stamp

把日志文件放到HDFS。仅取了1000行。

hadoop fs -put 1000_log hdfs://localhost:9000/user/root/input

直接在Scala Shell中读取文件并计算PV。

scala> val textFile = sc.textFile("hdfs://localhost:9000/user/root/input/1000_log")
scala> val textRDD = textFile.map(_.split("\t")).filter(_.length == 6)
scala> val result = textRDD.map(w => ((new java.net.URL(w(2))).getHost,1)).reduceByKey(_ + _).map(item => item.swap).sortByKey(false).map(item => item.swap)
scala> result.saveAsTextFile("hdfs://localhost:9000/user/root/out8.txt")

从HDFS上取回结果:

hadoop fs -get hdfs://localhost:9000/user/root/out8.txt

查看结果:

$ more out8.txt/part-00000
(www.j1.com,126)
(tieba.baidu.com,65)
(113.105.174.5,60)
(www.baidu.com,54)
(mp.weixin.qq.com,46)
(119.147.106.188,40)
(bbs.caoav.net,31)
(i.ifeng.com,19)
(www.amazon.de,18)
(m.zhiyoula.com,18)
(www.360doc.com,16)
(br.pps.tv.iqiyi.com,14)
(www.1905.com,14)
(xa.btfs.ftn.qq.com,14)

如果是生成.snappy压缩格式的文件,则可以按如下方法重定向到本地文本文件。

hadoop fs -text part-r-00001.snappy > filename.txt

下面对同一日志文件计算UV(Unique View)。

UV一般认为不同cookie的访问则算不同的独立用户。

package org.asiainfo

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._

/**
 * @author:[email protected]
 * @date:2015年1月27日 下午5:54:39
 * @Description: TODO
 */
object UniqueViewCount {

  def main(args: Array[String]): Unit = {
    if(args.length < 4){
      System.err.println("Usage:<input_file> <url_column_index> <output_file>")
      System.exit(1)
    }
    val conf = new SparkConf().setAppName("UniqueViewApp")
    val sc = new SparkContext(conf)
    val url_index = args(1).toInt
    val cookie_index = args(2).toInt
    val textRDD = sc.textFile(args(0))
    	.map(_.split("\t"))
    	.map(line => (new java.net.URL(line(url_index)).getHost) + "\t" + line(cookie_index))
    	.distinct()
    	.map(line => (line.split("\t")(0),1))
    	.reduceByKey(_ + _)
    	.map(item => item.swap)
    	.sortByKey(false)
    	.map(item => item.swap)
    textRDD.saveAsTextFile(args(3))
  }

}

sbt package 编译打包。

生成jar文件,提交spark应用。

spark-submit --class main.UniqueViewCount target/scala-2.11/spark_2.11-1.0.jar hdfs://localhost:9000/user/root/intput/1000_log 2 4 hdfs://localhost:9000/user/root/output

结果:

more result.txt
(bbs.caoav.net,31)
(www.baidu.com,28)
(www.amazon.de,15)
(m.zhiyoula.com,15)
(www.360doc.com,14)
(m.sohu.com,11)
(mp.weixin.qq.com,11)
(www.kaixin001.com,10)
(www.zhiyoula.com,7)
(lolbox.duowan.com,7)

下面用shell来验证正确性:

先用python解析出url中的host:

#!/usr/bin/python
from urlparse import urlparse
import sys
with open(sys.argv[1],'r') as f:
        for line in f.readlines():
                splits = line.split('\t')
                url,cookie = urlparse(splits[2]).netloc,splits[4]
                print url + '\t' + cookie
 $ python check.py 1000_log > 1000_log_pre
 $ cat 1000_log_pre | sort | uniq | awk -F '\t' '{print $1}' | sort | uniq -c | sort -nr -k1|  head
     31 bbs.caoav.net
     28 www.baidu.com
     15 www.amazon.de
     15 m.zhiyoula.com
     14 www.360doc.com
     11 m.sohu.com
     11 mp.weixin.qq.com
     10 www.kaixin001.com
      7 www.zhiyoula.com

结果正确!

时间: 2024-10-07 04:13:35

使用Spark计算PV、UV的相关文章

hadoop 计算 pv uv

使用hadoop 进行页面的pv uv 计算 不推荐的做法 将访问者的cookie放在hashmap中进行去重计算uv,因为当访问量大时,会将hashmap撑爆,报出 java.lang.OutOfMemoryError: Java heap space 推荐做法: 使用textpair 将cookie作为second key 进行排序,在reduce中进行判断,如果上一个cookie和当前cookie不同则uv计数器加1 reduce 部分代码: public void reduce(Text

实时统计每天pv,uv的sparkStreaming结合redis结果存入mysql供前端展示

最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实际还需要按照类型字段分类统计pv,uv,比如按照date,hour,pv,uv,type来展示.这里介绍最基本的pv,uv的展示. id uv pv date hour 1 155599 306053 2018-07-27 18 关于什么是pv,uv,可以参见这篇博客:https://blog.csdn.net/petermsh/article/details/78652246 1.

3.算子+PV&amp;UV+submit提交参数+资源调度和任务调度源码分析+二次排序+分组topN+SparkShell

1.补充算子 transformations ?  mapPartitionWithIndex 类似于mapPartitions,除此之外还会携带分区的索引值. ?  repartition 增加或减少分区.会产生shuffle.(多个分区分到一个分区不会产生shuffle) 多用于增多分区. 底层调用的是coalesce ?  coalesce(合并) coalesce常用来减少分区,第二个参数是减少分区的过程中是否产生shuffle. true为产生shuffle,false不产生shuff

PV UV

定义 PV: Page View       页面浏览量或点击量,用户每次刷新即被计算一次. UV: Unique Visitor  就是有多少个IP数量.就是指的有多少人在访问你的店.每个人用的电脑和在不同的地方.所以IP不一样.这样就是就能说明客户的多少. 两者区别 PV和UV结合,UV少,PV多.说明来你店的客人,打开了多个网页.很喜欢你的店. PV如果和UV数差不多.说明来看你店的客人.来看一眼就走了.这就需要你自己好好看看你店有没有吸引力 PV UV,布布扣,bubuko.com

PV,UV,IP

参加了DTCC归来之后,各大电商技术大牛都会自豪的分享一下自己公司网站的PV,流量等等.当时也是一知半解,回来之后赶紧查了查,也算是扫扫盲. 以下摘自网络中,自己稍稍做了整理,对于PV,流量和带宽的理解,可以分成几个问题可能更加容易理解. 问题1:首先什么是PV, 技术角度讲,1个PV是指从浏览器发出一个对网络服务器的Request,网络服务器接到Request之后,会开始把该Request对应的一个Page(Page就是一个网页)发送到客户端的浏览器上,恭喜,这就是一个Page View 对这

hadoop分布式系统下的mapreduce java小程序计算网站uv

一.准备工作 1.1 搭建hadoop分布式系统,博主是用3台虚拟机搭建的一个简易hadoop分布式系统. linux 5.5 64位     hadoop2.6.0 192.168.19.201   h1   (master) 192.168.19.202   h2   (slaver1) 192.168.19.203   h3   (slaver2) 1.2 准备网站访问IP文件 由于是实验,一个简单的txt文件即可 如:vim a.txt 10.0.0.1 10.0.0.2 10.0.0.

网站流量度量术语 IP PV UV 并发

经常有人问你们公司网站有多少IP ??多少PV ?? 多少UV ?? 多少并发?? 只剩我一脸蒙逼!! 下面我们就来分别介绍一下上面所提到的这些名词术语 IP IP,这里指独立IP数,独立ip数是指不同IP地址的计算机访问网站时被计的总次数 独立ip数是衡量网站流量的一个重要指标,一般都是说一天多少IP 一般一天内相同ip地址的客户端访问网站页面只会被记为一次,因为国内所有公司都是采用局域网,出口NAT地址转换的方式上网,所以有时一个公司的人访问同一网站会被记为同一IP 由此可见,通过独立IP数

网站的PV UV IP

www.cnblogs.com/fanyong/p/3338283.html PV:PV 是Page Views的缩写,即页面浏览量,用户每一次对网站中的每个网页访问均被记录一次.注意,访客每刷新一次页面,pv就增加一次. UV:UV是Unique Visitor的缩写,即独立访客数.指访问某个站点的不同IP地址的人数.在同一天的00:00-24:00内,uv只记录第一次进入网站的具有独立IP的访问者, 在同一天内再次或多次访问该网站则不计数. IP:一个独立IP访问网页,IP就增加一次,同一个

网站流量PV,UV,IP的含义

文章来源:http://lzj0470.iteye.com/blog/647453 1.什么是pv PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标. 高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你网站几个页面.这里需要强调:同一个人浏览你网站同一个页面,不重复计算pv量,点100次也算1次.说白了,pv就是一个访问者打开了你的几个页面. PV之于网站,就像收视率之于电视,从某种程度上已成为投资者衡量商业网站表现