gpt4 book ai didi

scala - Spark 使用递归案例类

转载 作者:行者123 更新时间:2023-12-01 23:08:01 24 4
gpt4 key购买 nike

我有一个递归的数据结构。 Spark 给出此错误:

Exception in thread "main" java.lang.UnsupportedOperationException: cannot have circular references in class, but got the circular reference of class BulletPoint

作为示例,我执行了以下代码:

case class BulletPoint(item: String, children: List[BulletPoint])

object TestApp extends App {
val sparkSession = SparkSession
.builder()
.appName("spark app")
.master(s"local")
.getOrCreate()

import sparkSession.implicits._

sparkSession.createDataset(List(BulletPoint("1", Nil), BulletPoint("2", Nil)))
}

有人知道如何解决这个问题吗?

最佳答案

异常是相当明确的 - 默认情况下不支持这种情况。您必须记住,数据集被编码为关系模式,因此所有必需的字段都必须预先声明并有界。这里没有递归结构的地方。

这里有一个小窗口 - binary 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)
))

但除非绝对必要,否则您确实不希望在代码中使用它。

关于scala - Spark 使用递归案例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54241088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com