scala Неуказанные значения параметров - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу расширить класс 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

}

Но я получаю ошибку в SparkSession части extends SparkSession с ошибкой:

Неуказанные параметры значения: sc: SparkContext

Я знаю, что он исходит из конструктора this в исходном SparkContext, но яне уверен, как, или если я могу даже расширить это должным образом.Есть идеи?

1 Ответ

0 голосов
/ 01 декабря 2018

Когда вы пишете class Foo extends Bar, вы фактически (1) создаете конструктор по умолчанию (без аргументов) для класса Foo и (2) вызываете конструктор по умолчанию для класса Bar.

Следовательно, если у вас есть что-то вроде класса Bar(bar: String), вы не можете просто написать class Foo extends Bar, потому что нет конструктора по умолчанию для вызова, вам нужно передать параметр для bar.Таким образом, вы можете написать что-то вроде class Foo(bar: String) extends Bar(bar), это будет работать.

Вот почему вы видите эту ошибку - вы пытаетесь вызвать конструктор для SparkSession, но не передаёте никакого значения для sc.

Но у вас есть большая проблема.Это ключевое слово private, которое вы видите рядом с SparkSession (и еще одно перед this), означает, что конструктор ... ну ... приватный.Вы не можете назвать это.Другими словами, этот класс нельзя разделить на подклассы (вне пакета sql), поэтому вам следует искать другой способ добиться того, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...