首页 > 解决方案 > 如何以编程方式获取有关 PySpark 中执行程序的信息

问题描述

当一个新的 pyspark 应用程序启动时,它会创建一个漂亮的 Web UI,其中包含 Jobs、Stages、Executors 等选项卡。如果我转到 Executors 选项卡,我可以看到 executors 的完整列表以及每个 executor 的一些信息 - 例如核心数,使用的存储内存与总内存等。

我的问题是我是否可以以某种方式从应用程序本身以编程方式访问相同的信息(或至少部分信息),例如看起来像的东西spark.sparkContext.<function_name_to_get_info_about_executors>()

我找到了一些以类似于 webUI 的方式进行 url 请求的解决方法,但我认为也许我错过了一个更简单的解决方案。

我正在使用 Spark 3.0.0

标签: apache-sparkpyspark

解决方案


到目前为止,我发现的唯一方法对我来说似乎很棘手,并且涉及抓取与 Web UI 查询相同的 url,即这样做:

import urllib.request
import json
sc = spark.sparkContext
u = sc.uiWebUrl + '/api/v1/applications/' + sc.applicationId + '/allexecutors'
with urllib.request.urlopen(u) as url:
    executors_data = json.loads(url.read().decode())

推荐阅读