如何从 PySpark 上下文中提取应用程序 ID

How to extract application ID from the PySpark context

一个previous question推荐sc.applicationId,但是出现在PySpark,只出现在scala

那么,如何找出我的 PySpark 进程的应用程序 ID(对于 yarn)?

您可以通过 Py4J RPC 网关使用 Java SparkContext 对象:

>>> sc._jsc.sc().applicationId()
u'application_1433865536131_34483'

请注意 sc._jsc 是内部变量,而不是 public API 的一部分 - 所以它有可能(相当小)在未来被改变。

我将提交拉取请求以添加 public API 为此调用。

在 Spark 1.6 中(根据@wladymyrov 对其他答案的评论,可能是 1.5)

In [1]: sc.applicationId
Out[1]: u'local-1455827907865'

对于 PySpark 2.0.0+

spark_session = SparkSession \
    .builder \
    .enableHiveSupport() \
    .getOrCreate()

app_id = spark_session._sc.applicationId

看起来至少 available in 3.0.1:

from pyspark.sql import SparkSession
spark = SparkSession \
    .builder \
    .appName('Overriding defaults app name') \
    .getOrCreate()
print(f'--- {spark.sparkContext.applicationId} ---')

结果:

--- application_1610550667906_166057 ---