获取正在运行的databricks作业的类名

pzfprimi  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(442)

有一个apachesparkscala项目(runnerproject)在同一个包(sourceproject)中使用另一个项目。源项目的目的是获取正在运行的databricks作业的名称和版本。
以下方法的问题是,当从runnerproject调用它时,它返回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。而且,它还应该返回有关“caller”作业的详细信息。
提前谢谢!:)

ltskdhd1

ltskdhd11#

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

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函数中调用它,它可能会给您错误的包。

相关问题