Моя исходная структура данных содержит собственные ссылки, которые не поддерживаются искрой:
initial.toDF
java.lang.UnsupportedOperationException: cannot have circular references in class, but got the circular reference
Исходная структура данных:
case class FooInitial(bar:String, otherSelf:Option[FooInitial])
val initial = Seq(FooInitial("first", Some(FooInitial("i1", Some(FooInitial("i2", Some(FooInitial("finish", None))))))))
Чтобы исправить это, семантически похожее и желаемое представление может быть:
case class Inner(value:String)
case class Foo(bar:String, otherSelf:Option[Seq[Inner]])
val first = Foo("first", None)
val intermediate1 = Inner("i1")//Foo("i1", None)
val intermediate2 = Inner("i2")//Foo("i2", None)
val finish = Foo("finish", Some(Seq(intermediate1, intermediate2)))
val basic = Seq(first, finish)
basic.foreach(println)
val df = basic.toDF
df.printSchema
df.show
+------+------------+
| bar| otherSelf|
+------+------------+
| first| null|
|finish|[[i1], [i2]]|
+------+------------+
Какой хороший функциональный способ преобразования из начального в другой, не ссылающийся на себя
представление