首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala:数组上的MapReduce

Scala:数组上的MapReduce
EN

Stack Overflow用户
提问于 2015-12-30 06:59:37
回答 1查看 122关注 0票数 1

我有一个数组

代码语言:javascript
复制
Array(1, 2, 3, 5)

我需要计算所有的减法来得到一个新的列表

代码语言:javascript
复制
Array(1, 1, 2) // Array(2-1, 3-2, 5-3)

如果您使用的是slidingmapping,则实现起来非常容易

代码语言:javascript
复制
(xs sliding 2).toList map { case List(x, y) => y - x }

但是如果我想通过MR来计算呢?有可能吗?至于我,我看不到任何这样做的可能性。也许还有其他的想法呢?

EN

回答 1

Stack Overflow用户

发布于 2015-12-30 09:12:50

可能是这样的:

代码语言:javascript
复制
list.zip(list.drop(1)).map { case(x,y) => y-x }

您也可以使用foldRight来完成此操作:

代码语言:javascript
复制
list.foldRight(List.empty[Int]) {
  case (x, Nil) => List(x)
  case (x, y :: tail) => x :: (y - x) :: tail
}.drop(1)

但是我可以问一下你在这里真正想要做的是什么吗?

或者,如果您出于某种模糊的原因坚持只使用mapreduce (这会是什么原因),下面这样的代码将会起作用:

代码语言:javascript
复制
 list
  .map { x => List(x) }
  .reduce { (a,b) => 
    b.head :: (b.head - a.head) :: a.tail 
  }.drop(1).reverse

这实际上是作弊,因为您给reduce的函数必须是可交换和可联想的,而本例中两者都不是。它只是碰巧在玩具应用程序中工作,因为没有并行性,但不要尝试在现实生活中使用它,因为它可能会非常严重地崩溃……也是因为没有理由这样做。

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

https://stackoverflow.com/questions/34520414

复制
相关文章

相似问题

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