[英]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
如果是案例類,我們可以做,但就我而言,它是一個對象
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中的特征,沒關系),則在構造時需要知道這些參數。 即,您必須具有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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.