python - 迪斯科/MapReduce : Using results of previous iteration as input to new iteration

标签 python mapreduce disco

目前正在 Disco 上实现 PageRank。作为迭代算法,一次迭代的结果作为下一次迭代的输入。

我有一个代表所有链接的大文件,每一行代表一个页面,行中的值代表它链接到的页面。

对于 Disco,我将这个文件分成 N 个 block ,然后运行 ​​MapReduce 一轮。结果,我得到了一组 (page, rank) 元组。

我想将此排名提供给下一次迭代。但是,现在我的映射器需要两个输入:图形文件和 pageranks。

  1. 我想“压缩”在一起 图形文件和页面排名, 这样每一行代表一个 页面,它是排名,它是外链。
  2. 由于这个图形文件分为 N 个 block ,我需要将 pagerank 向量分成 N 个 并行 block ,并压缩区域 pagerank 向量的图表 block

这一切似乎比必要的更复杂,而且作为一个非常简单的操作(使用典型的 mapreduce 算法),我似乎遗漏了一些关于 Disco 的东西,这些东西可以真正简化方法。

有什么想法吗?

最佳答案

看起来您会希望在第一遍中使用 init_map,然后在每个后续迭代中使用 iter_map。

参见:http://discoproject.org/doc/faq.html#id7

你能输出包含外链的 python 对象,而不仅仅是 (page,rank) 元组吗?

另一种选择是在某处(dict、memcache、kyotocabinet 等)通过页面键入外链,并从映射函数中查找它们。如果您使用 Disco 链接事物,我认为您不会希望在工作流程中间将事物压缩在一起。

关于python - 迪斯科/MapReduce : Using results of previous iteration as input to new iteration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2566402/

相关文章:

python - 迪斯科扩散 : PytorchStreamReader failed reading zip archive: failed finding central directory

python - 如何在 Pandas DataFrame 中组合范围和单个/数组列选择

python - 遍历具有不同长度字符串的列表

python - Flask-sqlalchemy - 用户查询 'BaseQuery' 对象没有属性 'password'

java - 通过 java Processbuilder 提交 mapreduce 作业不会结束

c - 主从配置中的 STM32 奇数定时器 1 行为 - mb 代码问题

python - 在 Docker 容器中运行 Disco

javascript - 无法在 JavaScript 中解析 JSON 数据结构

异构集群中的 Hadoop MapReduce2 优化

hadoop - 强制 Hadoop 运行具有多个 reducer 的应用程序