Scala 线程池(在驱动程序上)和执行器内核之间的关系是什么?
我正在尝试使用scala的Futures API运行一个进程,以并行运行某些操作。下面是一个示例代码片段Scala 线程池(在驱动程序上)和执行器内核之间的关系是什么?,scala,apache-spark,Scala,Apache Spark,我正在尝试使用scala的Futures API运行一个进程,以并行运行某些操作。下面是一个示例代码片段 import scala.util._ import scala.concurrent._ import scala.concurrent.ExecutionContext.Implicits.global object ConcurrentContext { def def appMain(args: Array[String]) = { // configure spark val
import scala.util._
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
object ConcurrentContext {
def def appMain(args: Array[String]) = {
// configure spark
val spark = SparkSession
.builder
.appName("parjobs")
.getOrCreate()
val pool = Executors.newFixedThreadPool(5)
// create the implicit ExecutionContext based on our thread pool
implicit val xc = ExecutionContext.fromExecutorService(pool)
/** Wraps a code block in a Future and returns the future */
def executeAsync[T](f: => T): Future[T] = {
Future(f)
}
}
我的问题是:-
ExecutionContext
将基于启动进程的机器上存在的所有内核(将是驱动程序)创建一个默认线程池,在这种情况下,executor core属性会有何影响它也是。正确吗?请记住,未来迫在眉睫……您使用
SparkSession
设置的属性(包括spark.executor.cores
)只会影响spark在分布式数据结构(RDD、DataFrame、Dataset)上执行的任务的并行性。你所做的一切,都是在驱动机器上,独立于Spark;你可以使用线程池等来控制它的并行性@EmiCareOfCell44-你能解释一下“未来迫在眉睫”是什么意思吗,也许可以helpful@suj1th-我想我明白你的意思了,主驱动程序JVM将基于线程池生成多个线程,每个线程都可以访问相同的Spark上下文,以便在将来并行运行多个调用。我的理解正确吗?