You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SparkSession中获取Job ID或Application ID?

SparkSession 获取 Job ID 和 Application ID 的方法

当然可以!在 Spark 2.x 及后续版本中,SparkSession 作为统一的编程入口,完全支持获取 Application ID 和 Job ID,下面具体说明:

获取 Application ID

Application ID 是整个 Spark 应用的唯一标识,你可以通过 SparkSession 直接访问其底层的 SparkContext 来获取,和你之前用 SparkContext 的方式本质一致:

示例代码

// 假设你的 SparkSession 实例名为 spark
val appId = spark.sparkContext.applicationId
// 输出类似: app-20150224184813-11531

你之前使用 SparkContext 的方式是:

val appId = sc.applicationId
// 输出类似: app-20150224184813-11531

两者获取的是同一个值,因为同一应用内 SparkSession 关联的 SparkContext 和你直接创建的 sc 是同一个实例。

获取 Job ID

Job ID 是每个 Spark 作业(触发 action 操作的任务)的唯一标识,它在作业提交时动态生成,同样可以通过 SparkSession 关联的 SparkContext 来获取,常见方式有两种:

方式1:通过 SparkListener 监听作业事件

自定义一个监听器,在作业启动时获取 Job ID:

import org.apache.spark.scheduler.{SparkListener, SparkListenerJobStart}

// 自定义监听器
val jobListener = new SparkListener {
  override def onJobStart(jobStart: SparkListenerJobStart): Unit = {
    val jobId = jobStart.jobId
    println(s"当前启动的作业 ID: $jobId")
  }
}

// 给 SparkSession 的 SparkContext 添加监听器
spark.sparkContext.addSparkListener(jobListener)

方式2:结合 Action 操作获取

当你调用 Dataset/DataFrame 的 action 操作(比如 count()、show())时,也可以通过 SparkContext 的相关 API 捕获作业元数据。需要注意的是,Job ID 是作业级别的,同一个应用内可以生成多个不同的 Job ID,而 Application ID 是整个应用生命周期内唯一的。

内容的提问来源于stack exchange,提问作者Jill Clover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:55:10