如何获得PySpark中的工作人员(执行者)数量?

时间:2016-07-29 14:07:14

标签: scala apache-spark pyspark

我需要使用此参数,那么如何获得工作人员数量? 就像在Scala中一样,我可以调用sc.getExecutorMemoryStatus来获取可用的工作人员数量。但是在PySpark中,似乎没有公开API来获得这个数字。

2 个答案:

答案 0 :(得分:17)

在scala中,getExecutorStorageStatusgetExecutorMemoryStatus都返回执行程序的数量,包括驱动程序。 如下面的示例代码段

/** 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.enabledtrue 时,spark.executor.instances 可能不等于当前可用的执行器,但此 API 始终返回正确的值。