URL请求数-MRJob-Python数据分析(6)
1.1. 前言
我们计算URL请求数经过这四个步骤:
Mapper: 将以行数据解析成 key=请求的URL数 value=1的形式
Shuffle: 通过Shuffle后的结果会生成以 key 的值排序的 value迭代器
结果如: 请求的URL数 [1, 1, 1 ... 1, 1]
Reduce 1: 在这边我们计算出 每个请求的URL 的访问量
输出如: None [sum([1, 1, 1 ... 1, 1]), key]
Reduce 2: 对sum([1, 1, 1 ... 1, 1]) 进行排序并输出 TOP 100
输入如: 246361 "/wp-admin/admin-ajax.php"
1.2. 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
cat
mr_url_req
.
py
# -*- coding: utf-8 -*-
from
mrjob
.
job
import
MRJob
from
mrjob
.
step
import
MRStep
from
ng_line_parser
import
NgLineParser
import
heapq
class
MRUrlRef
(
MRJob
)
:
ng_line_parser
=
NgLineParser
(
)
def
mapper
(
self
,
_
,
line
)
:
self
.
ng_line_parser
.
parse
(
line
)
yield
self
.
ng_line_parser
.
reference_url
,
1
# 外链域名
def
reducer_sum
(
self
,
key
,
values
)
:
""
"统计 VU"
""
yield
None
,
[
sum
(
values
)
,
key
]
def
reducer_top100
(
self
,
_
,
values
)
:
""
"访问数降序"
""
for
cnt
,
path
in
heapq
.
nlargest
(
100
,
values
)
:
yield
cnt
,
path
def
steps
(
self
)
:
return
[
MRStep
(
mapper
=
self
.
mapper
,
reducer
=
self
.
reducer_sum
)
,
MRStep
(
reducer
=
self
.
reducer_top100
)
]
def
main
(
)
:
MRUrlRef
.
run
(
)
if
__name__
==
'__main__'
:
main
(
)
|
运行统计和输出结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
python
mr_url_req
.
py
<
www
.
ttmark
.
com
.
access
.
log
No
configs
found
;
falling
back
on
auto
-
configuration
Creating
temp
directory
/
tmp
/
mr_url_req
.
root
.
20160924.133027.483660
Running
step
1
of
2...
reading
from
STDIN
Streaming
final
output
from
/
tmp
/
mr_url_req
.
root
.
20160924.133027.483660
/
output
.
.
.
246361
"/wp-admin/admin-ajax.php"
126012
"/tag/"
57325
"/"
.
.
.
.
.
.
778
"/meirong/2016/03/15/8442.html"
776
"/jiaju/2015/05/30/6058.html"
773
"/jiaju/2015/05/15/5747.html"
Removing
temp
directory
/
tmp
/
mr_url_req
.
root
.
20160924.133027.483660...
|
值得一提的是我们在这边使用了 heapq.nlargest 函数来计算 TOP 100 的URL请求数,或许多的程序员估计会使用 sorted([1, 1, 1 ... 1, 1])[:100] 这中形式来做。个人建议在数据量大的时候千万别这么高这样内存会被吃尽并报OOM错误。主要是因为 sorted 先生成了一个list 再对list进行切片。如果list数据量大就有问题。
昵称: HH
QQ: 275258836
ttlsa群交流沟通(QQ群②: 6690706 QQ群③: 168085569 QQ群④: 415230207(新) 微信公众号: ttlsacom)
感觉本文内容不错,读后有收获?
逛逛衣服店,鼓励作者写出更好文章。
收 藏
成长的对话版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!