/** 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
}
%python
sc = spark._jsc.sc()
n_workers = len([executor.host() for executor in sc.statusTracker().getExecutorInfos() ]) -1
print(n_workers)
正如丹尼在评论中提到的,如果你想交叉验证他们,你可以使用下面的声明。
%python
sc = spark._jsc.sc()
result1 = sc.getExecutorMemoryStatus().keys() # will print all the executors + driver available
result2 = len([executor.host() for executor in sc.statusTracker().getExecutorInfos() ]) -1
print(result1, end ='\n')
print(result2)
3条答案
按热度按时间kupeojn61#
在scala中,
getExecutorStorageStatus
和getExecutorMemoryStatus
都返回执行器的数量,包括驱动程序。但在python API中没有实现
@DanielDarabos answer也证实了这一点。
在python中与此等价的...
正如丹尼在评论中提到的,如果你想交叉验证他们,你可以使用下面的声明。
示例结果:
bq3bfh9z2#
你也可以通过Spark REST API获取执行器的数量:https://spark.apache.org/docs/latest/monitoring.html#rest-api
您可以检查
/applications/[app-id]/executors
,它返回 * 给定应用程序的所有活动执行器的列表 *。PS:当
spark.dynamicAllocation.enabled
为true
时,spark.executor.instances
可能不等于当前可用的执行器,但此API始终返回正确的值。zpqajqem3#
我以这种方式示例化了SparkContext**,但是没有一个解决方案起作用**:
所以我修改了代码,用
pyspark.sql.SparkSession
示例化SparkContext,一切正常: