Набор данных и класс case с функцией apply - PullRequest
3 голосов
/ 17 января 2020

Скажем, у меня есть следующий класс case, в котором я определяю функцию apply в его объекте-компаньоне:

case class MyClass(a: Int, b: String) 
object MyClass {
  def apply(a: Int, b: String) = {
    if (b == "")
      new MyClass(a, a.toString)
    else
      new MyClass(a, b)
  }
}

println(MyClass(1,"")) //print MyClass(1,1) 
println(MyClass(2,"3")) // print MyClass(2,3)

Но теперь скажите, что я хочу иметь такое поведение с моими наборами данных:

val dx: Dataset[MyClass] = Seq((1,"b"))
        .toDF("a", "b")
        .as[MyClass]

dx.show(false)

напечатает, как и ожидалось:

+---+---+
|a  |b  |
+---+---+
|1  |b  |
+---+---+

, но теперь, если я сделаю:

val dx: Dataset[MyClass] = Seq((1,""))
        .toDF("a", "b")
        .as[MyClass]

dx.show(false)

, у меня будет:

+---+---+
|a  |b  |
+---+---+
|1  |   |
+---+---+

В то время как я ожидал:

+---+---+
|a  |b  |
+---+---+
|1  |1  |
+---+---+

Почему это? Можно ли как-нибудь использовать функцию apply, чтобы она была «эффективной»?

Большое спасибо за объяснение

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