gpt4 book ai didi

scala 未指定值参数

转载 作者:行者123 更新时间:2023-12-05 08:32:07 25 4
gpt4 key购买 nike

我想扩展 spark 中的 SparkSession 类。我复制了这里部分转载的原始 SparkSession 的构造函数:

class SparkSession private(
@transient val sparkContext: SparkContext,
@transient private val existingSharedState: Option[SharedState],
@transient private val parentSessionState: Option[SessionState],
@transient private[sql] val extensions: SparkSessionExtensions)
extends Serializable with Closeable with Logging { self =>

private[sql] def this(sc: SparkContext) {
this(sc, None, None, new SparkSessionExtensions)
}

// other implementations

}

这是我对它的扩展尝试:

class CustomSparkSession private(
@transient override val sparkContext: SparkContext,
@transient private val existingSharedState: Option[SharedState],
@transient private val parentSessionState: Option[SessionState],
@transient override private[sql] val extensions: SparkSessionExtensions)
extends SparkSession {

// implementation

}

但我在 extends SparkSessionSparkSession 部分收到错误消息:

Unspecified value parameters: sc: SparkContext

我知道它来自原始 SparkContext 中的 this 构造函数,但我不确定如何,或者我是否可以正确扩展它。有什么想法吗?

最佳答案

当您编写 class Foo extends Bar 时,您实际上是 (1) 为类 Foo 创建默认(无参数)构造函数,以及 (2) 调用默认Bar 类的构造函数。

因此,如果你有类似 class Bar(bar: String) 的东西,你不能只写 class Foo extends Bar,因为没有默认构造函数调用时,您需要为 bar 传递一个参数。所以,你可以这样写

class Foo(bar: String) extends Bar(bar) 

这就是您看到此错误的原因 - 您正在尝试为 SparkSession 调用构造函数,但没有为 sc 传递任何值。

但是你有一个更大的问题。您在 SparkSession 旁边看到的 private 关键字(以及 this 之前的另一个关键字)意味着构造函数是......好吧......私有(private)的。你不能调用它。换句话说,这个类不能被子类化(在 sql 包之外),所以你应该寻找另一种方法来实现你正在尝试做的事情。

关于scala 未指定值参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53564697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com