首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapReduce映射

MapReduce映射
EN

Stack Overflow用户
提问于 2018-03-15 00:15:35
回答 1查看 45关注 0票数 0

我正在学习MapReduce框架,并对此有以下问题:

  1. MapReduce范式本质上有map()reduce() (以及其他几个)。所有编程逻辑能否有效地表示为map()reduce()? 例如,假设我想对一棵树进行有序遍历.这个任务能否有效地划分为一个map()reduce()任务?如果是,怎么做?如果不是,那么我如何利用MapReduce框架来完成这个任务?

有序遍历通用代码

代码语言:javascript
复制
// Iterative solution
public void inOrderIter(TreeNode root) {

    if(root == null)
        return;

    Stack<TreeNode> s = new Stack<TreeNode>();
    TreeNode currentNode=root;

    while(!s.empty() || currentNode!=null){

        if(currentNode!=null)
        {
            s.push(currentNode);
            currentNode=currentNode.left;
        }
        else
        {
            TreeNode n=s.pop();
            System.out.printf("%d ",n.data);
            currentNode=n.right;
        }
    }
}
  1. 我们能否只有一个map()而没有相应的reduce(),反之亦然?
  2. 根据reduce()函数生成最终的输出-它是否需要只生成一个值?
  3. 您如何决定某个任务是map()还是reduce()的一部分?
  4. 关于如何对给定任务执行map-ify和reduc-ify,有什么一般性的建议吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-15 17:40:57

要回答您的问题:

MapReduce范式本质上有map()reduce() (以及其他几个)。所有编程逻辑能否有效地表示为map()reduce()

MapReduce是一种设计模式,因此只适用于那些适用于BigData上下文的问题案例。虽然您可能能够通过一个涉及一系列映射缩减的算法来解决问题,但它可能不是执行参数(所需资源和时间)中最有效的代码。同时,传统的算法可能根本无法工作(仅仅是因为您有太多的数据),而mapreduce可能会有所帮助。

我们能否只有一个map()而没有相应的reduce(),反之亦然?

在Java中,您可能拥有没有减少阶段的mapreduce,但反之亦然。不过,您可以选择使用默认的IdentityMapper

根据这个和这个,减()函数生成最终的输出-它是否需要只生成一个值?

不,您可以通过context.write()方法从映射器/还原器中写入尽可能多的值,只要您遵守每个API的输出类型。

您如何决定某个任务应该是map()还是reduce()的一部分?

地图约简中解决的大部分问题属于聚合,将两个数据集连接在一起,并通过某种下移的数据推导出结果。如果您理解mapreduce中的概念和处理步骤,您应该能够决定用map()和/或reduce()编写什么。

对于如何映射和还原给定的任务,有什么一般性的建议吗?

再说一次,这取决于你想要实现什么。一般来说,map()是关于读取数据集,过滤它们(如果可能有不想要的记录,或者记录的一部分),并决定所有的数据需要用一个键组合在一起。Reducer是针对一个键(由mapper编写)处理数据的收集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49289624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档