Search code examples
scalaconcurrencyparallel-collections

Parallel map operations?


Does Scala provide a way to execute parallel map operations as part of the standard language?

For example, given:

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

I can do:

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

However, to the best of my knowledge this maps the provided function over the list objects sequentially. Is there a built-in way to have the function applied to each element in a separate thread (or equivalent), and the results then gathered into a resulting list?


Solution

  • If you add par then you will get a parallel collection and operations on it will be processed in parallel. To convert back to a normal collection call a toList.

    So your code would look like:

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

    Or a .seq to get a Sequential Collection (the opposite of a Parallel Collection).

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

    Also, check the documentation.