Scala 2.13 par 无法解析,解决方案与并行集合案例解析
Scala为了充分使用多核CPU,提供了并行集合模块
Scala 2.13之后,并行集合模块变成了外部库,直接像Scala 2.12那样写并行集合计算代码,IDE会报“Cannot resolve symbol par”
解决方法
步骤1: 在maven项目的pom.xml中手动导入如下依赖
<dependencies>
<dependency>
<groupId>org.scala-lang.modules</groupId>
<artifactId>scala-parallel-collections_2.13</artifactId>
<version>0.2.0</version>
</dependency>
</dependencies>
步骤2: 在使用的并行集合的.scala 文件中引入
import scala.collection.parallel.CollectionConverters._
案例
案例1 – 打印1-10数字
代码
def main(args: Array[String]): Unit = {
// 结果是有序
(1 to 10).foreach(println(_))
println()
//结果是无序的,说明是将println任务分配给不同cpu
(1 to 10).par.foreach(println(_))
}
结果
1
2
3
4
5
6
7
8
9
10
7
4
1
5
8
2
6
10
9
3
案例2 – 查看并行集合中元素访问的线程
代码
def main(args: Array[String]): Unit = {
val result1 = (0 to 100).map { case _ => Thread.currentThread.getName }.distinct
val result2 = (0 to 100).par.map { case _ => Thread.currentThread.getName }.distinct
println(result1) //非并行
println("--------------------------------------------")
println(result2) //并行
}
结果
Vector(main)
--------------------------------------------
ParVector(scala-execution-context-global-11, scala-execution-context-global-17, scala-execution-context-global-15, scala-execution-context-global-13, scala-execution-context-global-16, scala-execution-context-global-12, scala-execution-context-global-14, scala-execution-context-global-18)