Scala Spark是否鼓励使用并行集合
在Spark上使用并行集合有意义吗 到目前为止,我看到的所有Spark示例都使用了非常简单的数据类型(单类和元组)的RDD。但事实上,集合,特别是并行集合可以用作RDD的驻留 工作进程可能有几个可供执行的内核,如果将常规集合用作RDD驻留,那么这些额外的内核将保持空闲 我和本地经理一起运行的测试Scala Spark是否鼓励使用并行集合,scala,apache-spark,parallel-processing,Scala,Apache Spark,Parallel Processing,在Spark上使用并行集合有意义吗 到目前为止,我看到的所有Spark示例都使用了非常简单的数据类型(单类和元组)的RDD。但事实上,集合,特别是并行集合可以用作RDD的驻留 工作进程可能有几个可供执行的内核,如果将常规集合用作RDD驻留,那么这些额外的内核将保持空闲 我和本地经理一起运行的测试 val conf: SparkConf = new SparkConf().setAppName("myApp").setMaster("local[2]") val sc = new SparkCon
val conf: SparkConf = new SparkConf().setAppName("myApp").setMaster("local[2]")
val sc = new SparkContext(conf)
val l = List(1,2,3,4,5,6,7,8)
val l1 = l.map(item => (item, 1 to item toList))
val l2 = l1.map(item => (item._1, item._2.toParArray))
val l3 = sc.parallelize(l2)
l3.sortBy(_._1).foreach(t => t._2.map(x => {println(t._1 + " " +Thread.currentThread.getName); x / 2}))
在本例中,当我使用parArray时,我看到16个线程工作,而当我使用简单数组时,只有2个线程工作。这可能被视为2个工人有可用的8个线程
另一方面,并行集合的每个逻辑都可以更改为简单类型的RDD转换
是否鼓励并考虑使用这些平行收集
是否鼓励并考虑使用这些平行收集
不太可能。考虑以下事实:
- 对于资源管理器来说,任务内部的任何并行执行都是完全不透明的,因此它无法自动分配所需的资源
- 您可以使用
在任务中明确请求特定数量的线程,但这是一个全局设置,不能根据上下文进行调整,因此无论您是否使用资源,都可以有效地阻止资源spark.task.cpu
- 如果线程利用率不足是一个值得关注的问题,则始终可以增加分区数