Scala parallel programming, parallel collections, .par, and performance

Summary: This short post shows a few examples of using parallel collections in Scala.

To be clear, these examples of using Scala parallel collections aren’t my own examples, they come from this page on the scala-lang.org website. But, for the completeness of my Scala cookbook recipes, I wanted to make sure I included a reference to parallel collections here. (I do have other examples of using parallel collections in Scala on this site.)

First, here’s an example of converting a normal Scala List to a parallel list (technically a ParSeq) so you can then run a parallel map method to transform a collection of String objects to all-uppercase strings:

scala> val lastNames = List("Smith","Jones","Frankenstein","Bach","Jackson","Rodin").par
lastNames: scala.collection.parallel.immutable.ParSeq[String] 
       = ParVector(Smith, Jones, Frankenstein, Bach, Jackson, Rodin)

scala> lastNames.map(_.toUpperCase)
res0: scala.collection.parallel.immutable.ParSeq[String] 
       = ParVector(SMITH, JONES, FRANKENSTEIN, BACH, JACKSON, RODIN)

And here’s a second example of how to convert a map operation on a List from the usual approach:

val list = (1 to 10000).toList
list.map(_ + 42)

to using the map method on a parallel collection by again invoking .par, this time without creating the explicit intermediate reference (as was done with lastNames in the previous example):

list.par.map(_ + 42)

Again, these Scala parallel programming examples come from this page on the official Scala website. I’ll add my own examples here in time, but until I get a chance to write those, I wanted to make sure that people who are using my Scala cookbook as a reference had a link to a great parallel programming resource.

Also, here’s a link to a great Measuring Performance article on the official Scala website.