在Apache Spark程序中,我们如何知道哪部分代码将在驱动程序中执行,哪部分代码将在工作节点中执行?
其实很简单。由转换创建的闭包内发生的所有事情都发生在工作人员身上。这意味着如果有东西传入内部map(...)
, filter(...)
, mapPartitions(...)
, groupBy*(...)
, aggregateBy*(...)
是对工人执行的。它包括从持久存储或远程源读取数据。
类似的行动count
, reduce(...)
, fold(...)
通常在 driver 和worker 上执行。重型搬运由工人并行执行,而一些最终步骤(例如减少从工人收到的输出)则由驾驶员顺序执行。
其他一切,例如触发动作或转换,都发生在驾驶员身上。特别是,它意味着需要访问的每一个操作SparkContext
。在 PySpark 中,它还意味着与 Py4j 网关的通信。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)