我正在尝试在我分组的集合中进行简单的聚合。像这样:
case class Foo(key:String, value:Int)
val minPerKey = lotsOfFoos.groupBy(_.key).mapValues(_.minBy(_.value))
现在我想并行执行相同的操作,但 ParMap 没有 mapValues 函数。
为什么会这样,我应该怎么做?
我正在尝试在我分组的集合中进行简单的聚合。像这样:
case class Foo(key:String, value:Int)
val minPerKey = lotsOfFoos.groupBy(_.key).mapValues(_.minBy(_.value))
现在我想并行执行相同的操作,但 ParMap 没有 mapValues 函数。
为什么会这样,我应该怎么做?
Scala 2.10 具有用于 ParMap 的 mapValues。
但是将 mapValues 与 ParMap 一起使用并没有太多好处。mapValues 方法只是为您提供了一个在读取值时应用您的函数的新 Map,它实际上并没有更改 Map 中的值。因此,您需要执行一些其他操作来强制使用映射值创建新 Map。
由于 ParMapLike 上不存在 mapValues,因此剩下两个选项:
.map{case (key, value) => (key->value.minBy(_.value)) }
.toMap.mapValues(_.minBy(_.value))
我不知道为什么 mapValues 不仅仅在 ParMapLike 上实现