MapReduce 排序和洗牌如何工作?

2024-04-18

我正在使用 yelps MRJob 库来实现映射缩减功能。我知道 MapReduce 有一个内部排序和洗牌算法,它根据键对值进行排序。所以如果我在地图阶段后得到以下结果

(1, 24) (4, 25) (3, 26)

我知道排序和洗牌阶段将产生以下输出

(1, 24) (3, 26) (4, 25)

正如预期的那样

但是,如果我有两个相似的键和不同的值,为什么排序和洗牌阶段会根据出现的第一个值对数据进行排序?

例如 如果我有来自映射器的以下值列表

(2, <25, 26>) (1, <24, 23>) (1, <23, 24>) 

预期输出是

(1, <24, 23>) (1, <23, 24>) (2, <25, 26>)

但我得到的输出是

(1, <23, 24>) (1, <24, 23>) (2, <25, 26>)

这个 MRjob 库具体吗?无论如何,有没有办法停止这种基于值的排序?

CODE

from mrjob.job import MRJob
import math

class SortMR(MRJob):



def steps(self):
    return [
        self.mr(mapper=self.rangemr,
                reducer=self.rangesort)]


def rangemr(self, key, line):
    for a in line.split():
        yield 1,a


def rangesort(self,numid,line):
    for a in line:
        yield(1, a)


if __name__ == '__main__':
    SortMR.run()

对值进行“排序”的唯一方法是使用包含值本身的一些信息的复合键。然后,您的键的compareTo 方法可以确保键首先按实际键组件排序,然后按值组件排序。最后,您需要一个组分区器来确保在缩减程序中具有相同“键”组件(实际键)的所有键都被认为是相等的,并且在对reduce方法的一次调用中迭代关联的值。

这被称为“二次排序”,类似的问题 https://stackoverflow.com/questions/14320313/mapreduce-sort-values对此提供了一些示例链接。

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

MapReduce 排序和洗牌如何工作? 的相关文章

随机推荐

  • 将 Iso8601TimeSpanConverter 添加到 JsonConverter 列表会引发 ArrayTypeMismatch 异常

    我正在使用 AutoRest 从 Swagger 定义文件自动生成 REST API 的 C 类 问题在于 当执行客户端类的initialize方法时 会抛出ArrayTypeMismatchException 代码如下 Serializa
  • Gunicorn 日志配置 access_log_format

    我希望 Gunicorn 在我的 docker 容器中记录 JSON 我想在配置文件中使用 access logformat 尝试添加format or access log format or access logformat不配置记录器
  • 将 Mercurial 存储库转换为 svn 存储库

    我知道你可以将 svn 存储库转换为 Mercurial 存储库 或使用 Mercurial 作为 svn 存储库的客户端 但我想要的是将 Mercurial 存储库转换为 svn 存储库 我们有一些使用 SVNKit 的工具 我们想继续使
  • 如何在android中将AutoCompleteTextView与RecyclerView.Adapter一起使用但不与ArrayAdapter一起使用

    我有一个需要实施自动建议的情况 为此 我一直在尝试使用自定义的 RecyclerView Adapter 但问题是 AutoCompleteTextView 似乎是为 BaseAdapter 及其子类制作的 因此 适配器不被接受 还有其他方
  • Asp.net Web API - 从actionfilter返回数据

    我想从 Web api 操作过滤器返回一个 json 对象 我怎样才能实现这个目标 我可以从操作返回对象 但我需要在某些条件下从操作过滤器返回一些数据 提前致谢 编辑 1 当我更改如下代码时 浏览器仍在加载而没有任何响应 并以超时错误结束
  • 验证用户输入/为 .NET 控件提供状态 OK 或 NOK

    我正在考虑验证用户输入的最佳方法 让我们想象一下一些文本框 复选框或您喜欢的任何 NET 控件 其中必须将用户输入验证为 OK 或 NOK 一旦用户填写了所有必填字段 他就通过按钮提交 现在我必须知道哪些字段之前被确认为 OK 哪些字段被确
  • ReactJS - 如何让 onFocus 和 onBlur 工作

    据我了解 onFocus单击输入框时应调用 并且onBlur当其他事情成为焦点时应该调用 我的意图 我想调用一个函数 当通过单击激活时 它将 concat焦点输入框的消息字符串 但我无法获取onFocus or onBlur上班 从我周围搜
  • 通过按键和scrollTo插件向下滚动到下一个元素 - jQuery

    我正在使用 jQuery 的scrollTo http flesler blogspot com 2007 10 jqueryscrollto html插件使用向上箭头和向下箭头向上和向下滚动我的页面 我有一堆带有 screen 类的 di
  • 如何使用 Eclipse 的 google 插件使用经过精心编译的 HTML 来部署 GWT 应用程序

    我使用 eclipse 的 google 插件来部署我的 GWT 应用程序 到目前为止它运行良好 部署操作首先使用 混淆 输出样式编译我的 GWT 项目 现在我希望它更改为 漂亮 因为我必须调试客户端在运行中 我只是看不到混淆的堆栈 Tha
  • PHP MySQLi 权限被拒绝,但可以从 MySQL CLI 运行

    我收到错误 Failed to connect to MySQL Permission denied 当从 PHP 与 MySQL MySQLi 和 PDO 连接到远程 MySQL 主机时 但是 如果我从同一主机在命令行上使用相同的凭据通过
  • Android - StaggeredGrid错误项目处理

    我的 Recycler 视图和 StaggeredGrid 有问题 它将宽度减少了 2 我使用 Picasso 将图像加载到项目中 当我第一次加载图像时 它们在回收器视图中的处理方式很奇怪 重新加载后 一切似乎都很好 我认为问题来自图像加载
  • 调用 sdp_record_register() 时出现分段错误

    我正在尝试使用 BlueZ 在 SDP 中注册我的蓝牙服务 我跟随this http people csail mit edu albert bluez intro x604 html教程 代码编译成功 但当我运行它时 出现分段错误 即使是
  • 如何从 d3 导入子模块以轻松创建图例?

    我对 JavaScript 和 D3 比较陌生 所以请记住这一点 我创建了一个可视化来显示仓库中特定位置的访问频率 并希望使用连续色标添加图例 我看过几个街区 可能会想出一些离题的东西 但是我遇到了this https observable
  • /usr/local/lib 中未找到共享库

    我不明白 我通常安装第三方软件 usr 本地因此库被安装到 usr local lib 中并且链接到这些库从来没有出现问题 但现在它突然不再起作用 gcc lkaytils o test test c usr bin ld gold rea
  • Django 和通用访问卡 (CAC)

    计划用 Python 编写 Web 应用程序 Django 是框架的领先竞争者 一项要求是 CAC 访问 无需手动输入用户名和密码 据我所知 CAC 访问不是 Django 包含的 电池 的一部分 作为一个整体框架 不一定是坏属性 Djan
  • 具有内边缘的 SpriteKit SKPhysicsBody

    我创建了一个SKSpriteNode比如说Map它有一个我定义的边缘路径 一些简单的多边形形状 我想弄清楚的是如何添加几个other将充当内部边缘的边缘路径Map 就好像整个 地图 实际上确实有holes 某种内部边界形状可以与Map整体
  • 计算结构向量中的匹配项

    我有一个问题 要求我计算该数组中使用以下任一方法的实例的数量std count or std find 我知道如何使用标准数据 参见底部代码 类型来执行此操作 但不知道如何使用NameContainer我正在使用的 Type struct
  • Firebase 更新 apple-app-site-association

    我正在实现动态链接 一切正常 除了在我的项目设置中我更改了 团队 ID 又名 AppStore 应用程序前缀 如果我访问myproject page link apple app site association它仍然给我旧的团队 ID 我
  • 如果我在实现工厂模式时使用抽象类而不是接口。它仍然是工厂模式吗?

    例如 http www tutorialspoint com design pattern factory pattern htm http www tutorialspoint com design pattern factory pat
  • MapReduce 排序和洗牌如何工作?

    我正在使用 yelps MRJob 库来实现映射缩减功能 我知道 MapReduce 有一个内部排序和洗牌算法 它根据键对值进行排序 所以如果我在地图阶段后得到以下结果 1 24 4 25 3 26 我知道排序和洗牌阶段将产生以下输出 1