我需要使用此参数,那么如何获得工作人员数量?
就像在Scala中一样,我可以调用sc.getExecutorMemoryStatus
来获取可用的工作人员数量。但是在PySpark中,似乎没有公开API来获得这个数字。
答案 0 :(得分:17)
在scala中,getExecutorStorageStatus
和getExecutorMemoryStatus
都返回执行程序的数量,包括驱动程序。
如下面的示例代码段
/** Method that just returns the current active/registered executors
* excluding the driver.
* @param sc The spark context to retrieve registered executors.
* @return a list of executors each in the form of host:port.
*/
def currentActiveExecutors(sc: SparkContext): Seq[String] = {
val allExecutors = sc.getExecutorMemoryStatus.map(_._1)
val driverHost: String = sc.getConf.get("spark.driver.host")
allExecutors.filter(! _.split(":")(0).equals(driverHost)).toList
}
But In python api it was not implemented
@DanielDarabos answer也证实了这一点。
但是,我不是pyspark的专家。你可以尝试一些相当于这个python的东西...
sc.getConf.getInt("spark.executor.instances", 1)
答案 1 :(得分:1)
还可以通过 Spark REST API 获取执行器的数量:https://spark.apache.org/docs/latest/monitoring.html#rest-api
您可以检查 /applications/[app-id]/executors
,它返回给定应用程序的所有活动执行程序的列表。
附注:
当 spark.dynamicAllocation.enabled
为 true
时,spark.executor.instances
可能不等于当前可用的执行器,但此 API 始终返回正确的值。