在 Erlang 中实现 MapReduce 框架

Posted

技术标签:

【中文标题】在 Erlang 中实现 MapReduce 框架【英文标题】:Implementing a MapReduce skeleton in Erlang 【发布时间】:2022-01-22 02:18:59 【问题描述】:

我对并行编程和 Erlang 语言都很陌生,而且我有点挣扎。

我很难实现 mapreduce 框架。我生成了 M 个映射器(它们的任务是将幂函数映射到浮点数列表中)和 R 个化简器(它们对映射器发送的输入列表的元素求和)。

然后我想要做的是将每个映射器的中间结果发送到一个随机减速器,我该如何将一个映射器链接到一个减速器? 我已经在互联网上查看了示例。我能找到的最接近我想做的事情是this word counter example,作者似乎找到了一种将映射器链接到reducer的聪明方法,并且逻辑是有道理的,但是我无法对其进行调整为了满足我的特殊需要。也许键值实现不适合求幂列表的总和?

有什么帮助吗?

【问题讨论】:

【参考方案1】:

好的,我已经设法更改单词计数器示例的代码来计算幂列表的总和。

其实很简单。 (还有一些我之前尝试过的东西,但一开始并没有用。也许有一个我没有注意到的错误,但是哦。)

问题确实存在于用户定义的映射函数以及它生成键值对的方式中:对于每一对,键总是应该是同一个原子,而值只是应用到的正弦函数当前号码。

这是我必须对上面链接的代码进行的唯一修改:

M_func = fun(List) ->
                 lists:map( fun(X) -> 
                  atom, X*X
               end, List)
           end,

【讨论】:

以上是关于在 Erlang 中实现 MapReduce 框架的主要内容,如果未能解决你的问题,请参考以下文章

在 Erlang 中实现图灵机

在 Erlang 的 gen_server 中实现代码交换

在 mapreduce 中实现 BigQuery UDF 作为地图的动机是啥?

mapreduce 程序从 hive 读取数据

Erlang 心跳

试图在 swift 3 框架中实现 JWPlayer