Скажем, у меня есть следующий класс 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, чтобы она была «эффективной»?
Большое спасибо за объяснение