Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark是否鼓励使用并行集合_Scala_Apache Spark_Parallel Processing - Fatal编程技术网

Scala Spark是否鼓励使用并行集合

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

在Spark上使用并行集合有意义吗

到目前为止,我看到的所有Spark示例都使用了非常简单的数据类型(单类和元组)的RDD。但事实上,集合,特别是并行集合可以用作RDD的驻留

工作进程可能有几个可供执行的内核,如果将常规集合用作RDD驻留,那么这些额外的内核将保持空闲

我和本地经理一起运行的测试

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
    在任务中明确请求特定数量的线程,但这是一个全局设置,不能根据上下文进行调整,因此无论您是否使用资源,都可以有效地阻止资源
  • 如果线程利用率不足是一个值得关注的问题,则始终可以增加分区数
最后,让我们:

并行收集相当复杂且难以管理(隐式线程池)。它适用于更多的基本线程管理,但Spark本身内置了更复杂的并行化