有一个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”作业的详细信息。
提前谢谢!:)
1条答案
按热度按时间ltskdhd11#
尝试以下操作,它从堆栈跟踪中获取调用类名,并使用它来获取实际的类及其包。
如果您直接调用它,它将工作,如果您从lambda函数中调用它,它可能会给您错误的包。