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)
但是,据我所知,这将按顺序将提供的函数映射到列表对象上。是否有内置的方法将函数应用于单独的线程(或等效的)中的每个元素,然后将结果收集到结果列表中?
答案 0 :(得分:32)
如果添加par
,您将获得并行收集,并且将对其进行并行处理。要转换回普通集合,请拨打toList
。
所以你的代码看起来像是:
a.par.map(tup => tup._1 + tup._2).toList
或.seq
获取顺序集合(并行集合的相反)。
a.par.map(tup => tup._1 + tup._2).seq
答案 1 :(得分:8)
par
拆分列表以便在多个线程上进行处理。然后,您可以通过修改结果ParSeq
的{{3}}成员来规定线程的完成方式。