簡體   English   中英

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

如果是案例類,我們可以做,但就我而言,它是一個對象

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM