我是hadoop的初学者。我试图理解为什么mapreduce会这样命名。据我所知,它基本上是先对数据进行过滤,然后对其进行聚合以产生一些输出。为什么过滤或转换称为Map?如何将该操作视为Map?为什么这种聚合操作被称为还原?在这里,至少我可以想象聚合将把输入数据集减少到有限的值。我试图从语义的Angular 理解mapreduce的含义。
os8fio9y1#
为了找到mapreduce术语背后的原因,我们必须回到构成这个特定编程范式的那些元素的根源。这意味着我们需要谈论函数式编程(尽可能精确,尽可能少枯燥)。简而言之,维基百科的函数式编程是:一种声明式编程范例,其中函数定义是将值Map到其他值的表达式树,而不是更新程序运行状态的命令语句序列。这基本上意味着这个模型的重点是函数的应用,而不是着重于对状态所做的更改的命令式编程。因此,通过使用函数代码,执行中的函数不会真正依赖或操作超出其作用域的数据(如这里所说)。“好吧,那这和mapreduce有什么关系?”mapreduce直接受到函数式编程的启发,因为map和reduce函数是函数式编程中使用的基本函数。当然,mapreduce还为执行添加了许多其他阶段,如combine、shuffle、sort等,但该模型的核心思想源自上述函数式编程思想。关于Map,在函数意义上,它被描述为一个函数,它接收两个参数,一个函数和一个值列表。map函数本质上是在列表的每个值上实现函数,以返回结果的输出列表。你确实可以称之为一种“过滤”,但是数据可以用更多的方式来操作,而不仅仅是“过滤”它们。map函数的主要目标是将输入数据更改为reduce函数中下一步计算所需的形式。现在谈到reduce,它遵循类似的方法。这里也给出了两个参数,一个函数和一个要实现函数的值列表。因为这里的值列表是来自map函数输出的数据的转换集合,所以剩下要做的就是对它们进行处理并获得所需的结果。有了对mapreduce作业的抽象概念的了解,当您将reduce函数描述为试图聚合输入数据时,您的想法是正确的。不过,该过程中“缺少”的一件事是,如何以及基于什么来聚合这些输入数据。这是map函数的主要本质,如上所述。有了这些,我们可以理解mapreduce模型是以抽象实现的函数式编程的两个基本函数命名的,因此该模型本质上遵循了后者的语义契约。你可以从这里开始,从这里开始,从这里开始,从这里开始,从这里开始。
1条答案
按热度按时间os8fio9y1#
为了找到mapreduce术语背后的原因,我们必须回到构成这个特定编程范式的那些元素的根源。这意味着我们需要谈论函数式编程(尽可能精确,尽可能少枯燥)。
简而言之,维基百科的函数式编程是:
一种声明式编程范例,其中函数定义是将值Map到其他值的表达式树,而不是更新程序运行状态的命令语句序列。
这基本上意味着这个模型的重点是函数的应用,而不是着重于对状态所做的更改的命令式编程。因此,通过使用函数代码,执行中的函数不会真正依赖或操作超出其作用域的数据(如这里所说)。
“好吧,那这和mapreduce有什么关系?”
mapreduce直接受到函数式编程的启发,因为map和reduce函数是函数式编程中使用的基本函数。当然,mapreduce还为执行添加了许多其他阶段,如combine、shuffle、sort等,但该模型的核心思想源自上述函数式编程思想。
关于Map,在函数意义上,它被描述为一个函数,它接收两个参数,一个函数和一个值列表。map函数本质上是在列表的每个值上实现函数,以返回结果的输出列表。你确实可以称之为一种“过滤”,但是数据可以用更多的方式来操作,而不仅仅是“过滤”它们。map函数的主要目标是将输入数据更改为reduce函数中下一步计算所需的形式。
现在谈到reduce,它遵循类似的方法。这里也给出了两个参数,一个函数和一个要实现函数的值列表。因为这里的值列表是来自map函数输出的数据的转换集合,所以剩下要做的就是对它们进行处理并获得所需的结果。有了对mapreduce作业的抽象概念的了解,当您将reduce函数描述为试图聚合输入数据时,您的想法是正确的。不过,该过程中“缺少”的一件事是,如何以及基于什么来聚合这些输入数据。这是map函数的主要本质,如上所述。
有了这些,我们可以理解mapreduce模型是以抽象实现的函数式编程的两个基本函数命名的,因此该模型本质上遵循了后者的语义契约。
你可以从这里开始,从这里开始,从这里开始,从这里开始,从这里开始。