2013-01-24 68 views
1

我正在嘗試在已分組的集合中執行簡單聚合。就像這樣:如何將mapValues轉換爲Scala中的並行集合

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

現在我想要做相同的平行但ParMap沒有mapValues功能。

這是爲什麼,我應該怎麼做呢?

回答

3

Scala 2.10具有ParMap的mapValues。

但是,使用ParMap的mapValues沒有太多好處。 mapValues方法只是爲您提供了一個新的Map,它在讀取值時應用您的函數,但實際上並沒有改變Map中的值。因此,您需要執行一些其他操作,以強制創建具有映射值的新映射。

1

由於mapValues上不存在ParMapLike,有兩種選擇離開:

  1. 只需使用地圖:.map{case (key, value) => (key->value.minBy(_.value)) }
  2. 走出平行宇宙的:.toMap.mapValues(_.minBy(_.value))

我不知道爲什麼mapValues不是在ParMap上實現的像

+1

我會使用'.seq'而不是'.toMap',因爲它具有更好的記錄意圖。 –

相關問題