我需要一个带有参数的特征并将其用于创建隐式对象。通过以下方式。
newer_df = new_column(df, list, column_to_add, column_to_check)
如何将args(0)作为参数传递给SParkSessionTrait
如果它是一个案例类我们可以做,但在我的情况下它是一个对象
trait SparkSessionTrait(name:String) {
implicit val sparkSession = SparkSession
.builder()
.appName("AcoE Workflow_${name}")
.master("yarn")
.enableHiveSupport()
.getOrCreate()
}
答案 0 :(得分:3)
你想要的方式根本没有意义。
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()
}