浏览工具排名-MRJob-Python数据分析(10)

HH python39,0773字数 1603阅读5分20秒阅读模式

1.1. 前言

我们计算浏览工具排名经过这四个步骤:

Mapper: 将以行数据解析成 key=浏览工具 value=1的形式文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

Shuffle: 通过Shuffle后的结果会生成以 key 的值排序的 value迭代器文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

结果如: 浏览工具 [1, 1, 1 ... 1, 1]文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

Reduce 1: 在这边我们计算出 浏览工具 的访问量文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

输出如: None [sum([1, 1, 1 ... 1, 1]), key]文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

Reduce 2: 对sum([1, 1, 1 ... 1, 1]) 进行排序并输出 TOP 100文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

输入如: 104533  "Googlebot/2.1; +http://www.google.com/bot.html)"文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

1.2. 代码

cat mr_browser.py 
# -*- coding: utf-8 -*-
 
from mrjob.job import MRJob
from mrjob.step import MRStep
from ng_line_parser import NgLineParser
 
import heapq
 
class MRBrowser(MRJob):
 
    ng_line_parser = NgLineParser()
 
    def mapper(self, _, line):
        self.ng_line_parser.parse(line)
        yield self.ng_line_parser.browser, 1
 
    def reducer_sum(self, key, values):
        """统计 VU"""
        yield None, [sum(values), key]
 
    def reducer_top100(self, _, values):
        """访问数降序"""
        for cnt, browser in heapq.nlargest(100, values):
            yield cnt, browser
 
    def steps(self):
        return [
            MRStep(mapper=self.mapper,
                   reducer=self.reducer_sum),
            MRStep(reducer=self.reducer_top100)
        ]
 
 
def main():
    MRBrowser.run()
 
if __name__ == '__main__':
    main()

运行统计和输出结果文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

python mr_browser.py < www.ttmark.com.access.log
 
No configs found; falling back on auto-configuration
Creating temp directory /tmp/mr_browser.root.20160924.155814.200619
Running step 1 of 2...
reading from STDIN
Running step 2 of 2...
Streaming final output from /tmp/mr_browser.root.20160924.155814.200619/output...
104533  "Googlebot/2.1; +http://www.google.com/bot.html)"
101013  "Chrome/47.0.2526.106 larbin2.6.3@unspecified.mail"
57072   "bingbot/2.0; +http://www.bing.com/bingbot.htm)"
......
613     "P1 4.1.2)"
610     "Safari/534.30 OppoBrowser/3.9.2"
601     "9.3.2; zh_CN)"
Removing temp directory /tmp/mr_browser.root.20160924.155814.200619...

昵称: HH文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

QQ: 275258836文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

ttlsa群交流沟通(QQ群②: 6690706 QQ群③: 168085569 QQ群④: 415230207(新) 微信公众号: ttlsacom)文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

感觉本文内容不错,读后有收获?文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

逛逛衣服店,鼓励作者写出更好文章。文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/ 文章源自运维生存时间-https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
HH
  • 本文由 发表于 04/11/2016 00:15:16
  • 转载请务必保留本文链接:https://www.ttlsa.com/python/python-big-data-analysis-browser-order-mrjob/
评论  3  访客  3
    • test
      test 0

      test你好啊

        • 匿名
          匿名 9

          @ test

            • HH
              HH

              @ 匿名

        评论已关闭!