Python第三方库——mrjob的介绍

news2024/9/22 1:02:06

在这里插入图片描述

一、简介

mrjob 是一个强大的 Python 库,它允许开发者以 Pythonic 的方式编写 MapReduce 作业,并在多种环境下运行这些作业,包括本地机器、Hadoop 集群、Amazon Elastic MapReduce (EMR) 和 Google Cloud Dataproc。通过使用 mrjob,您可以轻松地处理大规模数据集,而无需深入了解 Hadoop 或其他底层技术的复杂性。

基本概念

MapReduce模型中,主要有两个步骤:MapReduce

  • Map阶段:接收输入数据,处理并生成中间键值对。

  • Reduce阶段:接收Map阶段输出的中间键值对,对具有相同键的所有值进行汇总处理。

MRJob允许你在Python类中定义这些步骤,并提供了丰富的API来支持复杂的MapReduce作业。

二、安装

使用 pip(Python 的包管理工具)来安装 mrjob

pip install mrjob
三、使用

mrjob 通过定义 mapperreducer 方法来创建 MapReduce 作业。这里在网上找了几个示例来展示如何使用 mrjob

1:计算输入文本中每个单词的出现次数
# word_count.py  
  
from mrjob.job importMRJob  
import re  
  
WORD_RE = re.compile(r'\b\w+\b')  
  
  
class WordCount(MRJob):  
    def mapper(self, _, line):  
        words = WORD_RE.findall(line)  
        for word in words:  
            yield word.lower(),1  
  
    def reducer(self, word, counts):  
        yield word,sum(counts)  
  
  
if __name__ =='__main__':  
WordCount.run()  
  
# mapper方法:该方法接收输入数据的每一行(_表示我们不关心行号),使用正则表达式找出所有单词,并生成键值对(单词,1)。  
# reducer方法:该方法接收具有相同键的所有值(即某个单词的所有计数),并计算总和。  
  
  
# 本地运行  
python word_count.py input.txt > output.txt  
  
# Hadoop  
python word_count.py -r hadoop hdfs://input/input.txt > output.txt
2:网页排名

由于PageRank算法的复杂性,这里只展示一个简化的链接计数版本。

from mrjob.job importMRJob  
  
class SimplifiedPageRank(MRJob):  
    def mapper(self, _, line):  
        # 假设每行是一个网页的URL及其链接到的URL列表,格式为 "page_url:link1 link2 link3"  
        parts = line.split(':')  
        iflen(parts)>1:  
            page_url = parts[0].strip()  
            links = parts[1].strip().split()  
            for link in links:  
                yield link,1# 输出链接到的网页URL及其计数1  
  
    def reducer(self, link, counts):  
        yield link,sum(counts)# 计算每个网页的入链总数  
  
if __name__ =='__main__':  
SimplifiedPageRank.run()
3:日志分析

假设我们要分析日志中的错误代码。

from mrjob.job importMRJob  
  
class LogAnalysis(MRJob):  
    def mapper(self, _, line):  
        # 假设日志行包含错误代码,格式为 "timestamp level message [error_code]"  
        parts = line.split(' ')  
        if'[error_code]'in parts:  
            error_code = parts[-1].strip('[]')  
            yield error_code,1  
  
    def reducer(self, error_code, counts):  
        yield error_code,sum(counts)  
  
if __name__ =='__main__':  
LogAnalysis.run()

上述日志分析的Mapper示例中使用了'[error_code]'作为占位符,您需要根据实际的日志格式进行替换。

4:社交网络分析

社交网络分析的具体实现取决于您要分析的具体问题(如用户关系、群组划分等)。下面提供一个用户关系分析的简化框架。

from mrjob.job importMRJob  
from collections import defaultdict    
  
class SocialNetworkAnalysis(MRJob):  
    def mapper(self, _, line):  
        # 假设每行是一个用户及其好友列表,格式为 "user_id:friend1 friend2 friend3"    
        parts = line.split(':')  
        iflen(parts)>1:  
            user_id = parts[0].strip()  
            friends =set(parts[1].strip().split())# 使用集合来避免重复好友    
            # 输出每个用户与其所有好友的键值对    
            for friend in friends:  
                yield(user_id, friend),1  
  
    def reducer(self, key, counts):  
        # key 是一个元组 (user_id, friend),counts 是该元组出现的次数(但在这个场景下总是1)    
        # 我们只关心键的存在,不关心具体的计数,因为我们想要计算的是独特好友的数量    
        # 但为了符合MapReduce的模型,我们还是输出一些值(这里选择输出1)    
        yield key,1  
  
    # 由于Reducer的输出是用户-好友对的列表,我们需要一个额外的步骤来统计每个用户的好友数量    
    # 这通常意味着我们需要另一个MapReduce作业,但在这个简化的例子中,我们可以使用Python的集合来模拟    
    # 注意:下面的finalize方法不会在MapReduce框架中自动运行,它只是为了说明如何处理Reducer的输出    
    def finalize(self):  
        # 假设我们有一个全局的字典来存储每个用户的好友列表(这在实际MapReduce中是不可能的)    
        # 但为了说明,我们模拟这个过程    
        user_friends = defaultdict(set)  
        # 这里我们实际上没有从Reducer接收数据,因为finalize方法不会这样做    
        # 但如果我们有一个全局变量或数据库来存储Reducer的输出,我们可以这样处理    
        # for user_id, friend in reducer_output:    
        #     user_friends[user_id].add(friend)    
  
        # 现在我们模拟计算每个用户的好友数量    
        # 在实际应用中,这将是另一个MapReduce作业或使用其他处理框架(如Spark、Flink)的任务    
        for user_id, friends in user_friends.items():  
            print(f"{user_id}: {len(friends)} friends")  
  
# 注意:上面的finalize方法只是为了说明目的而编写的,并不会在MRJob的MapReduce作业中自动执行    
# 要计算每个用户的好友数量,您通常需要编写另一个MapReduce作业,其中Mapper输出用户ID和好友列表(可能作为JSON字符串),    
# Reducer则聚合这些列表并计算每个用户的好友数量。    
  
if __name__ =='__main__':  
SocialNetworkAnalysis.run()  
  
# 重要的说明:    
# 由于MapReduce的分布式和无状态性质,上面的finalize方法并不是处理Reducer输出的正确方式。    
# 在实际的MapReduce作业中,您可能需要编写一个链式作业(chain of jobs),其中第一个作业输出用户-好友对,    
# 第二个作业则读取这些对并计算每个用户的好友数量。或者,您可以使用其他支持更复杂状态管理的数据处理框架。

MRJob是一个非常强大的Python库,它简化了MapReduce作业的编写和运行过程。通过提供直观的API和跨平台支持,MRJob使得Python开发者能够轻松处理大规模数据集。

关于Python技术储备

由于文章篇幅有限,文档资料内容较多,需要这些文档的朋友,可以加小助手微信免费获取,【保证100%免费】,中国人不骗中国人。

在这里插入图片描述

                                     **(扫码立即免费领取)**

全套Python学习资料分享:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

如有侵权,请联系删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1997322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARTS Week 37

Algorithm 本周的算法题为 1232. 缀点成线 给定一个数组 coordinates ,其中 coordinates[i] [x, y] , [x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上。 示例 1:输入:coordinates …

8月9日笔记

8月9日笔记 什么是代理? “代理”通常指的是“网络代理”,它是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。代理服务器作为中间人…

【中项】系统集成项目管理工程师-第11章 项目范围管理-11.3定义范围

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

PHP利用PCRE回溯次数

目录 原理 例子 来一道题(2018i春秋圣诞欢乐赛官方WriteUp) 利用php弱语言特性解题 利用回溯 原理 对于一串正则表达式来说它匹配了一系列的字符串后自身的正则还没有用完,这个时候就会触发回溯机制,超过回溯次数正则匹配就失…

【代码故事】VSCode知名主题material-theme仓库代码清空

大家好,我是前端之虎陈随易。 这是我的个人网站 https://chensuiyi.me。 出大事了 看到了一篇前端社区开源扛把子 Anthony Fu 的帖子。 经过一番了解,出大事了! 知名 VSCode 主题 material-theme 仓库清空了! 连带着所有提交…

【MySQL】1.MySQL基本操作

目录 一、MySQL数据库登陆 1、设置环境变量 2、cmd命令登陆数据库 二、基本操作语法 1、显示数据库——SHOW 2、使用/选择数据库——USE 3、删除——DROP 4、创建——CREATE 5、查看表结构——DESC 6、数据操作——增删改查 (1)增/插入&#…

SpringCloud-gateway编码实现路由策略的自动刷新,动态路由

文章目录 一、概述1、背景2、实现思路 二、编码实现1、nacos配置刷新公共类2、自定义RouteDefinition3、route缓存类4、动态更新路由网关service5、动态路由加载类 三、测试 一、概述 1、背景 gateway可以配置路由断言过滤器,但是通常一个微服务体系下&#xff0c…

KCTF 闯关游戏:1 ~ 7 关

前言 看雪CTF平台是一个专注于网络安全技术竞赛的在线平台,它提供了一个供网络安全爱好者和技术专家进行技术交流、学习和竞技的环境。CTF(Capture The Flag,夺旗赛)是网络安全领域内的一种流行竞赛形式,起源于1996年…

虚拟机Linux系统字体太小怎么办?

每次用虚拟机的Linux系统时,都觉得字体小得伤眼睛,所以就尝试找了下,没想到可以直接用大号字体,这感觉好多啦~ 这里针对centOS的图形界面,非常简单,见下面的图: 应用程序 --> 系统工具 --&…

ELK三个开源软件的工作原理

一、Elasticsearch Elasticsearch的工作原理主要涉及其数据处理、索引机制、查询过程以及集群管理等方面。一下是对Elasticsearch工作原理的详细解析: 1. 数据处理 1.1 数据导入 Elasticsearch支持多种数据源,包括直接输入、通过Logstash和Beats等工具…

js日期处理库--dayjs

js中处理日期是一件比较麻烦的事情,这里推荐使用day.js库来处理,文档:Day.js中文网 引入库 如果没有引入过dayjs,需要先执行npm install,然后import就能使用了 npm install dayjs import dayjs from dayjsconsole.log(dayjs().format()) 如果使用的…

leetcode日记(67)单词搜索

太坑了!老是时间超限,不是时间超限就是内存超限! 思路很简单,就是先遍历整个网格寻找开头,然后上下左右搜寻找下一个字母,引用递归。 最终看边答案边写出来的: class Solution { public:bool …

36-《茅膏菜》:自然奇境中的捕虫艺术家

茅膏菜 腺毛闪烁诱昆虫,粘液缠绕捕食成。 绿叶如网藏陷阱,茅膏菜展捕虫情。 中文名:茅膏菜 拉丁名:Drosera peltata Thunb. 别名:捕虫草、落地珍珠、一粒金丹、苍蝇草、珍珠草 科属:茅膏菜科茅膏菜属 生…

词向量,位置嵌入;归一化;自注意力层;投影;残差连接:防止梯度消失;MLP;

目录 词向量,位置嵌入 归一化 自注意力层 我们该如何处理Q、K和V向量呢 投影 残差连接:防止梯度消失 MLP 层归一化处理 GELU激活函数 MLP Weights 和MLP Projection Weights区别和联系 一、MLP Weights 二、MLP Projection Weights:输入数据或隐藏层的输出投影到…

指针(1)-学习笔记

指针(1)-学习笔记 1.内存1.1内存 2.指针变量和地址2.1取地址操作符(&)2.2指针变量和解引用操作符(*)2.2.1 指针变量2.2.2解引用操作符 3 指针变量类型的意义3.1指针的解引用3.2指针-整数3.3 void*指针 …

PyTorch深度学习实战(7)—— 线性回归

线性回归是机器学习的入门内容,应用十分广泛。线性回归利用数理统计中的回归分析来确定两种或两种以上变量间相互依赖的定量关系,其表达形式为$y wxbe$。其中,$x$和$y$是输入输出数据,$w$和$b$是可学习参数,误差$e$服…

Pod的调度机制

文章目录 一、Pod调度概述二、Pod调度策略实现方式三、kube-scheduler调度1、kube-scheduler调度的流程2、过滤阶段3、打分阶段4、kube-scheduler 调度示例4.1、创建 Deployment 资源清单4.2、应用Deployment4.3、查看被kube-scheduler自动调度的Pod 四、nodeName调度1、创建Po…

MySQL操作2——表的的操作(增删查改)

创建表; 样例: 注意不同的存储引擎创建出来的表在目录下的个数不同 显示此数据库下的所有表:show tables; show create table name \G ——查看创建表时的具体信息 查看某个表的结构:desc 表名; 查看表中储存的数据&…

阿里云与优酷联袂:Create@AI江湖创作大赛,探索AI创新边界

随着网剧《少年白马醉春风》的热播,许多人心中的江湖梦被唤醒,渴望踏入那个充满传奇色彩的影视世界,体验一段属于自己的江湖之旅。在 AIGC 技术日益成熟的今天,这一梦想变得触手可及。阿里云携手优酷,发起了 Create A…

Hadoop YARN:现代大数据集群资源管理与作业调度

1.Yarn的概述 1.1.解释Yarn的定义和基本概念 Hadoop YARN(Yet Another Resource Negotiator)是 Hadoop 2.x 版本引入的一种资源管理器,用于管理和调度大数据集群中的资源,是 Hadoop 集群的核心组件之一。YARN 的设计目标是提高 H…