Scala 2.13 par方法无法解析,解决方案与并行集合案例解析

Scala 2.13 par 无法解析,解决方案与并行集合案例解析

    • Scala为了充分使用多核CPU,提供了并行集合模块
    • Scala 2.13之后,并行集合模块变成了外部库,直接像Scala 2.12那样写并行集合计算代码,IDE会报“Cannot resolve symbol par”
    • 解决方法
    • 案例
      • 案例1 -- 打印1-10数字
      • 案例2 -- 查看并行集合中元素访问的线程

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)

你可能感兴趣的:(Scala,scala,spark)