获取 运行 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 函数中调用它,它可能会给您错误的包。
有一个 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 函数中调用它,它可能会给您错误的包。