为什么使用案例类在DataFrame上进行映射会失败,并且“无法找到存储在数据集中的类型的编码器”?

问题描述 投票:1回答:1

我已经导入了spark.implicits._但是我仍然得到错误

错误:(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) }

要么

val ds = df.as[User]

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

有什么原因吗?

apache-spark apache-spark-sql spark-dataframe
1个回答
4
投票

将案例类的移动声明超出范围就行了!

代码结构将如下:

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)) }
}
© www.soinside.com 2019 - 2024. All rights reserved.