Исключение является довольно явным - такой случай не поддерживается по умолчанию. Вы должны помнить, что Datasets
кодируются в реляционную схему, поэтому все обязательные поля должны быть объявлены заранее и ограничены. Здесь нет места для рекурсивной структуры.
Здесь есть маленькое окно - двоичный файл Encoders
:
import org.apache.spark.sql.{Encoder, Encoders}
sparkSession.createDataset(List(
BulletPoint("1", Nil), BulletPoint("2", Nil)
))(Encoders.kryo[BulletPoint])
или эквивалент:
implicit val bulletPointEncoder = Encoders.kryo[BulletPoint]
sparkSession.createDataset(List(
BulletPoint("1", Nil), BulletPoint("2", Nil)
))
но это действительно не то, что вы хотели бы иметь в своем коде, если в этом нет особой необходимости.