簡體   English   中英

獲取正在運行的 Databricks 作業的類名

[英]Get classname of the running Databricks Job

有一個Apache Spark Scala項目 ( 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 而且,它應該返回有關“調用者”作業的詳細信息

先感謝您! :)

嘗試以下操作,它從堆棧跟蹤中獲取調用類名稱,並使用它來獲取實際類,它是包。

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 函數中調用它,它可能會給您錯誤的包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM