scala 中 Trait 的参数
Parameter to the Trait in scala
我需要一个带有参数并将其用于创建隐式对象的特征。通过以下方式。
trait SparkSessionTrait(name:String) {
implicit val sparkSession = SparkSession
.builder()
.appName("AcoE Workflow_${name}")
.master("yarn")
.enableHiveSupport()
.getOrCreate()
}
如何将 args(0) 作为参数传递给 SParkSessionTrait
如果是这种情况我们可以做 class 但在我的情况下它是一个对象
object Test extends SparkSessionTrait{
def main(args: Array[String]): Unit = {
val name = args(0)
sparkSession.catalog.clearCache()
}
你想要的方式根本没有意义。
trait SparkSessionTrait(name:String)
是不允许的(但在 Scala 3 中会有一些限制),它必须是 class
。
但更重要的问题是,如果您使用参数(或 Scala 3 中的特征,这无关紧要)扩展 class,则需要在构造时知道这些参数。 IE。你必须有 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()
}
我需要一个带有参数并将其用于创建隐式对象的特征。通过以下方式。
trait SparkSessionTrait(name:String) {
implicit val sparkSession = SparkSession
.builder()
.appName("AcoE Workflow_${name}")
.master("yarn")
.enableHiveSupport()
.getOrCreate()
}
如何将 args(0) 作为参数传递给 SParkSessionTrait
如果是这种情况我们可以做 class 但在我的情况下它是一个对象
object Test extends SparkSessionTrait{
def main(args: Array[String]): Unit = {
val name = args(0)
sparkSession.catalog.clearCache()
}
你想要的方式根本没有意义。
trait SparkSessionTrait(name:String)
是不允许的(但在 Scala 3 中会有一些限制),它必须是 class
。
但更重要的问题是,如果您使用参数(或 Scala 3 中的特征,这无关紧要)扩展 class,则需要在构造时知道这些参数。 IE。你必须有 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()
}