scala中Trait的参数
我需要一个trait,它接受一个参数,并使用它创建隐式对象。以下面的方式scala中Trait的参数,scala,apache-spark,traits,Scala,Apache Spark,Traits,我需要一个trait,它接受一个参数,并使用它创建隐式对象。以下面的方式 trait SparkSessionTrait(name:String) { implicit val sparkSession = SparkSession .builder() .appName("AcoE Workflow_${name}")
trait SparkSessionTrait(name:String) {
implicit val sparkSession = SparkSession
.builder()
.appName("AcoE Workflow_${name}")
.master("yarn")
.enableHiveSupport()
.getOrCreate()
}
如何将参数(0)作为参数传递给SParkSessionTrait
如果它是一个case类,我们可以这样做,但在我的例子中,它是一个对象
object Test extends SparkSessionTrait{
def main(args: Array[String]): Unit = {
val name = args(0)
sparkSession.catalog.clearCache()
}
你想要的方式根本没有意义
trait SparkSessionTrait(name:String)
是不允许的(但在Scala 3中会有一些限制),它需要是一个类
但更重要的问题是,如果您使用参数(或Scala 3中的trait,这无关紧要)扩展类,则需要在构建时知道这些参数。也就是说,您必须让对象文本扩展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)
是不允许的(但在Scala 3中会有一些限制),它需要是一个类
但更重要的问题是,如果您使用参数(或Scala 3中的trait,这无关紧要)扩展类,则需要在构建时知道这些参数。也就是说,您必须让对象文本扩展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()
}
@JeffreyChung案例类接受参数,并在trait中初始化。但是对象不接受参数创建一个接受参数的测试类并创建一个伴生对象,然后重写apply方法并创建测试类的对象。@JeffreyChung case类接受参数并在trait中初始化。但是对象不接受参数创建一个接受参数的测试类并创建一个伴随对象,然后重写apply方法并创建测试类的对象。