![](/img/trans.png)
[英]Databricks: running spark-submit job with external jar file, 'Failed to load class' error
[英]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.