获取 运行 Databricks 作业的类名

Get classname of the running Databricks Job

有一个 Apache Spark Scala 项目 (runnerProject) 在同一个包 (sourceProject )。源项目的目的是获取 运行.

的 Databricks 作业的名称和版本

以下方法的问题在于,当从 runnerProject 调用 时,它 return 是 sourceProject 的 详细信息,而不是 runnerProject 的名称和版本

sourceProject 的方法:

class EnvironmentInfo(appName: String) {
 
override def getJobDetails(): (String, String) = {
    val classPackage = getClass.getPackage

    val jobName = classPackage.getImplementationTitle
    val jobVersion = classPackage.getImplementationVersion

    (jobName, jobVersion)
  }
 }

runnerProject 使用 sourceProject 作为包:

import com.sourceProject.environment.{EnvironmentInfo}

 class runnerProject {
  def start(
      environment: EnvironmentInfo
  ): Unit = {

// using the returned parameters of the environment

}

如何以 getJobDetails()sourceProject 中运行的方式解决此问题,以便它可以也从其他项目调用,而不仅仅是 runnerProject。而且,它应该 return 有关“呼叫者”工作的详细信息

提前致谢! :)

尝试以下操作,它从堆栈跟踪中获取调用 class 名称,并使用它来获取实际的 class,它是包。

class EnvironmentInfo(appName: String) {
 
override def getJobDetails(): (String, String) = {
    val callingClassName = Thread.currentThread.getStackTrace()(2).getClassName
    val classPackage = Class.forName(callingClassName).getPackage

    val jobName = classPackage.getImplementationTitle
    val jobVersion = classPackage.getImplementationVersion

    (jobName, jobVersion)
  }
 }

如果您直接调用它,它会起作用,如果您从 lambda 函数中调用它,它可能会给您错误的包。