То, как вы хотите это сделать, просто не имеет смысла.
trait SparkSessionTrait(name:String)
не разрешено (но будет в Scala 3 с некоторыми ограничениями), оно должно быть class
.
Но более важной проблемой является то, что если вы расширяете класс с параметрами (или признаком в Scala 3, это не имеет значения), эти параметры должны быть известны во время создания.Т.е. у тебя должно быть object Text extends SomeSessionTrait(someName)
.К тому времени, когда вызывается метод main
, уже слишком поздно, оттуда нельзя установить name
.
Один из способов изменить программу и заставить ее скомпилировать -
class SparkSessionTrait(name:String) {
implicit val sparkSession = SparkSession
.builder()
.appName("AcoE Workflow_${name}")
.master("yarn")
.enableHiveSupport()
.getOrCreate()
}
object Test {
def main(args: Array[String]): Unit = {
val name = args(0)
val sessionTrait = new SparkSessionTrait(name)
import sessionTrait._
sparkSession.catalog.clearCache()
}