并行映射操作?

时间:2013-11-20 10:07:04

标签: scala concurrency parallel-collections

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)

但是,据我所知,这将按顺序将提供的函数映射到列表对象上。是否有内置的方法将函数应用于单独的线程(或等效的)中的每个元素,然后将结果收集到结果列表中?

2 个答案:

答案 0 :(得分:32)

如果添加par,您将获得并行收集,并且将对其进行并行处理。要转换回普通集合,请拨打toList

所以你的代码看起来像是:

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

.seq获取顺序集合(并行集合的相反)。

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

Also, check the documentation.

答案 1 :(得分:8)

par拆分列表以便在多个线程上进行处理。然后,您可以通过修改结果ParSeq的{​​{3}}成员来规定线程的完成方式。

相关问题