mapValues如何转换为Scala中的并行集合

时间:2013-01-24 20:29:36

标签: scala

我正在尝试在我分组的集合中进行简单聚合。像这样:

case class Foo(key:String, value:Int)
val minPerKey = lotsOfFoos.groupBy(_.key).mapValues(_.minBy(_.value))

现在我想要并行执行相同操作,但ParMap没有mapValues函数。

为什么会这样,我该怎么做呢?

2 个答案:

答案 0 :(得分:3)

Scala 2.10具有ParMap的mapValues。

但是将mapValues与ParMap一起使用并没有太大的好处。 mapValues方法只是为您提供了一个在读取值时应用函数的新Map,它实际上并不会更改Map中的值。因此,您需要执行一些其他操作,以强制创建具有映射值的新Map。

答案 1 :(得分:1)

由于ParMapLike上不存在mapValues,因此还有两个选项:

  1. 只需使用地图:.map{case (key, value) => (key->value.minBy(_.value)) }
  2. 走出平行的宇宙:.toMap.mapValues(_.minBy(_.value))
  3. 我不知道为什么mapValues不仅仅在ParMapLike上实现