Apache spark 为什么使用case类在数据帧上进行映射会失败,并导致“无法找到数据集中存储的类型的编码器”?

Apache spark 为什么使用case类在数据帧上进行映射会失败,并导致“无法找到数据集中存储的类型的编码器”?,apache-spark,apache-spark-sql,spark-dataframe,Apache Spark,Apache Spark Sql,Spark Dataframe,我已经导入了spark.implicits.\u但仍然出现错误 错误:27、33找不到数据集中存储的类型的编码器。导入spark.implicits可支持基本类型Int、String等和产品类型case类。将来的版本中将添加对序列化其他类型的支持 我有一个案例类,如: case class User(name: String, dept: String) 我正在使用以下方法将Dataframe转换为数据集: val ds = df.map { row=> User(row.getStri

我已经导入了spark.implicits.\u但仍然出现错误

错误:27、33找不到数据集中存储的类型的编码器。导入spark.implicits可支持基本类型Int、String等和产品类型case类。将来的版本中将添加对序列化其他类型的支持

我有一个案例类,如:

case class User(name: String, dept: String)
我正在使用以下方法将Dataframe转换为数据集:

val ds = df.map { row=> User(row.getString(0), row.getString(1) }

另外,当我在Spark shell中尝试相同的代码时,我没有得到任何错误,只有当我通过IntelliJ运行它或提交作业时,我才得到这个错误


有什么原因吗?

将case类的声明移出范围就成功了

代码结构将如下所示:

package main.scala.UserAnalytics

// case class *outside* the main object
case class User(name: string, dept: String)

object UserAnalytics extends App {
    ...
    ds = df.map { row => User(row.getString(0), row.getString(1)) }
}

将case类的声明移出范围就成功了

代码结构将如下所示:

package main.scala.UserAnalytics

// case class *outside* the main object
case class User(name: string, dept: String)

object UserAnalytics extends App {
    ...
    ds = df.map { row => User(row.getString(0), row.getString(1)) }
}