Получить имя класса работающего задания Databricks
Существует проект Apache Spark Scala (runnerProject), который использует другой проект в том же пакете (sourceProject). Цель исходного проекта - получить имя и версию выполняемого задания Databricks.
Проблема со следующим методом является то, что, когда он вызывается из runnerProject, он возвращает sourceProject в детали, а не runnerProject имя и версию "s.
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. Кроме того, он должен возвращать сведения о задании "вызывающий".
Заранее спасибо!:)
1 ответ
Попробуйте следующее: он получает имя вызывающего класса из трассировки стека и использует его для получения фактического класса и его пакета.
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)
}
}
Он будет работать, если вы вызовете его напрямую, он может дать вам неправильный пакет, если вы вызовете его из лямбда-функции.