グループ化したコレクションで単純な集計を実行しようとしています。このような:
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 があります。
しかし、ParMap で mapValues を使用するメリットはあまりありません。mapValues メソッドは、値を読み取るときに関数を適用する新しいマップを提供するだけで、実際にはマップ内の値を変更しません。したがって、マップされた値を使用して新しいマップを強制的に作成する他のアクションを実行する必要があります。
mapValues は ParMapLike には存在しないため、2 つのオプションが残っています。
.map{case (key, value) => (key->value.minBy(_.value)) }
.toMap.mapValues(_.minBy(_.value))
mapValues が ParMapLike に実装されていない理由がわかりません