做MapReduce的最佳功能语言?

Vel*_*ost 6 haskell functional-programming mapreduce clojure

我正在为一门课程做一个作业,这要求我用函数式语言实现一个并行的MapReduce引擎,然后用它来解决某些简单的问题.

你认为我应该使用哪种功能语言?

这是我的要求:

  • 应该相对容易学习,因为我只有大约2周的时间来完成这项任务.
  • 具有能够在网络上找到现有的MapReduce实现-我当然也不会在一般使用开源代码或互联网资源禁止我.
  • 应该适合这个问题,并且是一种总体上值得学习的语言(一种相对流行的语言).

我目前正在考虑Haskell和Clojure,但这两种语言对我来说都是新的 - 我不知道这些语言是否真的适合这种情况.

mik*_*era 7

由于不同的原因,Clojure和Haskell绝对值得学习.如果你有机会,我会尝试两者.我还建议将Scala添加到您的列表中.

如果你必须选择一个,我会选择Clojure,原因如下:

此外,Clojure使并行map-reduce变得非常容易.这是一个开始:

(reduce + (pmap inc (range 1000)))
=> 500500
Run Code Online (Sandbox Code Playgroud)

使用pmap而不是map足以为您提供并行映射操作.如果您使用Clojure 1.5,还有并行Reducer,有关详细信息,请参阅reducers框架


Don*_*art 7

Cloud Haskell将是实现map/reduce模型的分布式系统引擎的合适选择.但是,对于双核本地系统,使用GHC运行时中的现有并行支持直接在GHC中实现它就足够了.开箱即用提供轻量级线程,工作窃取队列和其他有用的基元.

如果我正在实现/ new/MapReduce引擎,我会使用GHC.类型,并行调试工具(如ThreadScope)和优化编译器确保您能够从代码中获得所需的性能,而优秀的多核运行时将使您可以很好地扩展.