mrjob:该示例如何自动知道如何在文本文件中查找行?

2024-01-20

我试图更好地理解 mrjob 的示例

from mrjob.job import MRJob  
class MRWordFrequencyCount(MRJob):

    def mapper(self, _, line):
        yield "chars", len(line)
        yield "words", len(line.split())
        yield "lines", 1

    def reducer(self, key, values):
        yield key, sum(values)
if __name__ == '__main__':
    MRWordFrequencyCount.run()

我运行它

$ python word_count.py my_file.txt

它按预期工作,但我不明白它如何自动知道它将读取文本文件并将其按行分割。我不确定是什么_也有。

据我了解,mapper()为每行生成三个键/值对正确吗?如果我想处理文件夹中的每个文件该怎么办?

And the reducer()自动知道如何将每个键的值相加?

如果我想通过 MapReduce 运行单元测试怎么办,Mapper 和Reducer 会是什么样子?有必要吗?


映射器方法接收已经从输入文本中解析出来的键值对。 mrjob 使用 Hadoop 流式传输,每个输入文本都除以换行符,然后根据使用的输入协议将每一行拆分为键值对。这是框架为您处理的事情,因此您不必做任何繁重的工作;您可以假设您将获得正确的密钥和值。

但是,您确实需要指定指定的输入文本文件类型。例如,如果键和/或值不是纯文本(如原始问题中所示)而是序列化 JSON,则您可以使用 JSONProtocol/JSONValueProtocol 等,而不是默认的 RawValueProtocol。

对于初始映射器,每一行都被读入值(通过 RawValueProtocol),因此这就是您没有收到密钥的原因。使用_只是未使用的虚拟变量的 Python 约定。 (然而,_实际上是 Python 变量的有效名称。你可以做这样的事情a = 3; _ = 2; b = a + _。亵渎不是吗?)

mrjob 可以采用多个输入文件。例如你可以这样做

$ python wordcount.py text1.txt text2.txt

如果您希望所有文本文件作为 mrjob 作业的输入,您可以执行以下操作

$ python wordcount.py inputdir/*.txt

或者只是简单地

$ python wordcount.py inputdir

并且所有选定的文件都用作输入。

减速器接收的是一个键和与该键关联的所有值的迭代器。所以如果你举个例子,变量values在reducer方法中是一个迭代器。如果您想对所有值执行某些操作,则需要实际迭代所有值。在问题的具体示例中,内置函数sum可以将迭代器作为参数,这就是为什么你可以一次性完成它。但它实际上类似于sum([value for value in values]).

我实际上不知道如何对 mrjob 脚本进行单元测试。我通常在生产运行之前只测试一小块测试数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mrjob:该示例如何自动知道如何在文本文件中查找行? 的相关文章

  • 如何查找 pandas 数据框中连续相同字符串值的计数?

    假设我们有以下 pandas 数据框 df pd DataFrame col1 A gt G C gt T C gt T G gt T C gt T A gt G A gt G A gt G col2 TCT ACA TCA TCA GCT
  • 通过 Python 与 Windows 控制台应用程序交互

    我在 Windows 上使用 python 2 5 我希望通过 Popen 与控制台进程交互 我目前有一小段代码 p Popen console app exe stdin PIPE stdout PIPE issue command 1
  • Keras,如何获取每一层的输出?

    我已经用 CNN 训练了一个二元分类模型 这是我的代码 model Sequential model add Convolution2D nb filters kernel size 0 kernel size 1 border mode
  • 01 无效令牌[重复]

    这个问题在这里已经有答案了 嘿 学习 python3有一段时间了 遇到字典和dictionary name get 方法并尝试获取随机键值 问题 data data get key 1 它有效并且返回 1 但如果我使用data get ke
  • Python 中的二进制相移键控

    我目前正在编写一些代码 以使用音频转换通过激光传输消息 文件 和其他数据 我当前的代码使用 python 中 binascii 模块中的 hexlify 函数将数据转换为二进制 然后为 1 发出一个音调 为 0 发出不同的音调 这在理论上是
  • 用于打印 C/C++ 文件的所有函数定义的 Python 脚本

    我想要一个 python 脚本来打印 C C 文件中定义的所有函数的列表 e g abc c定义两个函数为 void func1 int func2 int i printf d i return 1 我只想搜索文件 abc c 并打印其中
  • 如何通过 Python socket.send() 发送字符串以外的任何内容

    我对 Python 编程非常陌生 但出于必要 我必须快速地将一些东西组合在一起 我正在尝试通过 UDP 发送一些数据 除了当我执行 socket send 时 我必须以字符串形式输入数据之外 一切都正常 这是我的程序 这样你就可以看到我在做
  • Python NLP 英式英语与美式英语

    我目前正在用Python 进行NLP 工作 然而 在我的语料库中 既有英式英语也有美式英语 实现 实现 我正在考虑将英式英语转换为美式英语 但是 我没有找到一个好的工具 包来做到这一点 有什么建议么 我也找不到包 但试试这个 请注意 我必须
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • Selenium 网页抓取与动态内容和隐藏数据表上的美丽汤

    真的需要这个社区的帮助 我正在使用 Selenium 和 Beautiful Soup 对 Python 中的动态内容进行网页抓取 问题是定价数据表无法解析为 Python 即使使用以下代码 html browser execute scr
  • 如何在Python中正确声明ctype结构+联合?

    我正在制作一个二进制数据解析器 虽然我可以依靠 C 但我想看看是否可以使用 Python 来完成该任务 我对如何实现这一点有一些了解 我当前的实现如下所示 from ctypes import class sHeader Structure
  • 指定 Parquet 属性 pyspark

    如何在 PySpark 中指定 Parquet 块大小和页面大小 我到处搜索 但找不到任何有关函数调用或导入库的文档 根据火花用户档案 https mail archives apache org mod mbox spark user 2
  • 如何在包更新之间保留数据文件?

    我正在使用data files的论证setuptools setup 将配置文件安装到 etc和用户主目录 但是更新包pip install
  • 从 subprocess.Popen 获取整个输出

    我通过调用 subprocess Popen 得到了一个有点奇怪的结果 我怀疑这与我对 Python 的陌生有很大关系 args cscript USERPROFILE tools jslint js USERPROFILE tools j
  • Synapse Notebook 参考 - 使用参数从另一个笔记本调用 Synapse Notebook

    我有一个带有参数的突触笔记本 我试图从另一个笔记本调用该笔记本 我正在使用 run 命令 我应该如何将参数从基本笔记本传递到正在调用的笔记本 另外 对我来说 上述答案不起作用 作为对此问题的单独解决方案 下面是一个答案 打开笔记本并转到最右
  • 在 Gensim 中通过 ID 检索文档的字符串版本

    我正在使用 Gensim 进行一些主题建模 并且已经达到使用 LSI 和 tf idf 模型进行相似性查询的程度 我取回 ID 集和相似点 例如 299501 0 64505910873413086 如何获取与 ID 在本例中为 29950
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y
  • 提供节点名或服务名,或未知

    我收到这个 Python 错误 File Library Frameworks Python framework Versions 2 7 lib python2 7 urllib2 py line 1184 in do open rais
  • Python 中的 C 指针算术

    我正在尝试将一个简单的 C 程序转换为 Python 但由于我对 C 和 Python 都一无所知 这对我来说很困难 我被 C 指针困住了 有一个函数采用 unsigned long int 指针并将其值添加到 while 循环中的某些变量
  • 使用Python的timeit获取“全局名称'foo'未定义”

    我想知道执行一条Python语句需要多少时间 所以我上网查了一下 发现标准库提供了一个名为timeit http docs python org library timeit html旨在做到这一点 import timeit def fo

随机推荐

  • 在部署的应用程序上播放来自 s3 的文件时出现跨源资源策略问题

    我在 Heroku 上部署了一个应用程序 可以让我播放音频文件 你可以在这里查看https telecurve herokuapp com manage https telecurve herokuapp com manage 在我在 He
  • 使用 StoryBoards 时进行单元测试 cellForRowAtIndexPath

    如果我要从故事板中的标识符中取出单元格 如何以单元测试的方式调用 cellForRowAtIndexPath 并且不让单元格为零 UITableViewCell tableView UITableView tableView cellFor
  • OData WebApi V4 .net - 自定义序列化

    我需要创建一个序列化器来支持以下所有任务 删除空属性 删除空列表 我注意到的语法ODataMediaTypeFormatter已经变了 我在将序列化提供程序添加到管道时遇到问题 这是我尝试过的 在 WebApiConfig cs 上 var
  • gaierror: [Errno -2] 名称或服务未知

    def make req data url method POST params urllib urlencode data headers Content type application x www form urlencoded Ac
  • 从环境中删除除与给定模式匹配的对象之外的所有对象

    我正在尝试删除所有objects来自我的 RStudio环境其中对象名称不等于模式 rm list ls pattern may19 但这给了我一个错误 as environment pos 中的错误 没有名为 pattern may19
  • 如何处理 Spark SQL 上的 AnalysisException?

    我正在尝试在 Spark 中执行查询列表 但如果查询未正确运行 Spark 会抛出以下错误 AnalysisException 不支持更改表更改列 这是我的代码的一部分 我在 Databricks 上使用 python 和 Spark SQ
  • 在android中为ksoap2设置编码utf-8

    我对 ksoap2 有问题 我想在 android 中为 ksoap2 设置编码 utf 8 或者在标头中设置内容类型为 text xml charset utf 8 我的代码 设置编码 envelope encodingStyle utf
  • MS Edge - window.print() 与 MS Edge 中的框架上下文无关

    与其他浏览器相比 Microsoft Edge 处理 window print 的方式不一致 在大多数浏览器中 从页面上的 iframe 内调用 window print 只会打印该 iframe 的内容 然而 在边缘它总是会打印整个文档
  • python - 递归删除字典键?

    我正在使用 Python 2 7plistlib以嵌套字典 数组形式导入 plist 然后查找特定键并在我看到它的任何地方将其删除 当谈到我们在办公室处理的实际文件时 我已经知道在哪里可以找到这些值 但我编写脚本时的想法是我不知道 希望我不
  • 行动扩展和共享核心数据

    我在我的应用程序中使用操作扩展 我们的应用程序当前使用核心数据 我正在应用程序和 使用应用程序组的操作扩展并成功将核心数据从文档目录迁移到应用程序组 当使用扩展程序将照片或笔记从照片 笔记应用程序导入到我的应用程序时 我遇到的问题会发生 该
  • 最佳实践 - 将事件声明为 Java 接口的一部分

    我正在尝试使用接口和事件来解耦一些 UI 代码 我想知道 Java 中是否有方法 最佳实践来将事件声明为 Java 接口的一部分 就像 C 提供的那样 C event declaration in interface public inte
  • 使用 Amazon Connect 将语音消息保存在 aws s3 存储桶中

    how to save voice message of customer number and store in an s3 bucket using aws connect I made a contact workflow but I
  • Python获取onclick值

    我正在使用 Python 和 BeautifulSoup 为我的一个小项目抓取网页 该网页有多个条目 每个条目由 HTML 中的表格行分隔 我的代码部分有效 但是很多输出是空白的 它不会从网页获取所有结果 甚至不会将它们收集到同一行中 ta
  • 在 Web 应用程序中使用条形码渲染框架生成条形码

    我正在使用条形码渲染框架来生成条形码 我已经下载了他们的dll 我可以看到 如何在 Windows 应用程序中完成它 我想做同样的事情 即生成条形码并在网络应用程序中使用它 以下是可以使用的问题的链接 适用于 NET 的免费条形码 API
  • Java Android 应用 MediaPlayer 中的 NullPointerException

    请帮忙 这只是我正在开发的一个简单的Android应用程序 它意味着每次单击按钮时都会播放声音 当我慢速单击按钮时它会工作 但如果我单击按钮总是崩溃由于运行时错误 NullPointerException 我不知道我做错了什么 这是我的代码
  • 使用临时变量代替重复的完整引用是否更好?

    假设我们有一个类似的对象 var foo a b c d e f 0 1 2 3 4 5 6 7 8 9 我们希望在函数中使用对象的各个部分 如下所示 function doStuff if foo a b c d e f 5 gt som
  • SPARQL - 查询属性并返回相关属性的结果

    我是 SPARQL 新手 我正在尝试运行 SPARQL 查询 以便返回属性的结果并根据此列出相关属性的值 示例代码为 SELECT player position club goals WHERE player a
  • Qt 安装程序框架:自动更新

    我目前正在使用 Qt 安装程序框架并设法建立一个在线存储库 我想知道的是 该框架是否提供某种 自动更新 机制 例如每次程序 系统启动时检查更新的插件 服务 检查更新就足够了 因为安装本身可以使用维护工具完成 关于这个话题 我能找到的只有这么
  • 互联网上的 C# 套接字

    我成功地用 C 制作了一个在 LAN 下完美运行的客户端服务器程序 我们使用了 TcpListener 和 TcpSocket 类 不过 我们无法让它在互联网上工作 我知道这与防火墙 路由器端口阻塞等有关 我们转发了我们使用的端口并关闭了防
  • mrjob:该示例如何自动知道如何在文本文件中查找行?

    我试图更好地理解 mrjob 的示例 from mrjob job import MRJob class MRWordFrequencyCount MRJob def mapper self line yield chars len lin