web-dev-qa-db-ja.com

並列マップ操作?

Scalaは、標準言語の一部として並列マップ操作を実行する方法を提供しますか?

たとえば、次のようになります。

scala> val a = List((1,2), (3,4), (3,6))
a: List[(Int, Int)] = List((1,2), (3,4), (3,6))

できます:

scala> a.map(tup => tup._1 + tup._2)
res0: List[Int] = List(3, 7, 9)

ただし、私の知る限り、これは提供された関数をリストオブジェクトに順番にマップします。関数を個別のスレッド(または同等のもの)の各要素に適用し、結果を結果リストに収集する組み込みの方法はありますか?

18
csvan

parを追加すると、並列コレクションが取得され、そのコレクションに対する操作が並列に処理されます。通常のコレクションに戻すには、toListを呼び出します。

したがって、コードは次のようになります。

a.par.map(tup => tup._1 + tup._2).toList

または.seqシーケンシャルコレクション(並列コレクションの反対)を取得します。

a.par.map(tup => tup._1 + tup._2).seq

また、ドキュメントを確認してください。

32
Akos Krivachy

parは、リストを分割して複数のスレッドに処理します。次に、結果のtasksupportの-​​ ParSeq メンバーを変更することにより、スレッド化の実行方法を調整できます。

8
mikołak