前面的问题推荐sc.applicationId
,但它在PySpark
中不存在,仅在scala
中存在。
那么,我该如何计算PySpark进程的应用程序id(对于yarn
)呢?
您可以通过Py4J RPC网关使用Java SparkContext对象:
>>> sc._jsc.sc().applicationId()
u'application_1433865536131_34483'
请注意,sc._jsc
是内部变量,而不是公共API的一部分,因此它在未来可能会更改的可能性(相当小)。
我将提交pull请求,为其添加公共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
看起来它至少在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 ---