Apache spark 在Apache Spark中区分驱动程序代码和工作代码

Apache spark 在Apache Spark中区分驱动程序代码和工作代码,apache-spark,driver,execution,worker,Apache Spark,Driver,Execution,Worker,在Apache Spark程序中,我们如何知道哪部分代码将在驱动程序中执行,哪部分代码将在工作节点中执行?实际上非常简单。在转换创建的闭包内发生的所有事情都发生在一个工作进程上。这意味着如果在map(…)内部传递了某个内容,filter(…),mapPartitions(…),groupBy*(…),aggregateBy*(…),则在工作线程上执行aggregateBy*(…)。它包括从持久存储器或远程源读取数据 像count,reduce(…),fold(…)这样的操作通常在驾驶员和工人身上

在Apache Spark程序中,我们如何知道哪部分代码将在驱动程序中执行,哪部分代码将在工作节点中执行?

实际上非常简单。在转换创建的闭包内发生的所有事情都发生在一个工作进程上。这意味着如果在
map(…)
内部传递了某个内容,
filter(…)
mapPartitions(…)
groupBy*(…)
aggregateBy*(…)
,则在工作线程上执行
aggregateBy*(…)
。它包括从持久存储器或远程源读取数据

count
reduce(…)
fold(…)
这样的操作通常在驾驶员和工人身上执行。重型起重作业由工人并行执行,最后的一些步骤,如减少工人的输出,在驾驶员上按顺序执行


其他一切,比如触发动作或转换,都发生在驱动程序上。特别是指需要访问
SparkContext
的每个操作。在PySpark中,它还意味着与Py4j网关的通信。

所有作为参数传递给JavaRDD/javapairdd/similor方法的闭包,这些类的某些方法将由spark节点执行。其他一切都是驱动程序代码。

DataFrame.write(PySpark)呢?它在哪里运行?