加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 为什么在创建自定义案例类的数据集时“无法找到存储在

发布时间:2020-12-16 09:32:54 所属栏目:安全 来源:网络整理
导读:Spark 2.0(最终)与Scala 2.11.8。以下超级简单代码产生编译错误错误:(17,45)无法找到存储在数据集中的类型的编码器。通过导入spark.implicits._支持原始类型(Int,String等)和产品类型(案例类)。将来的版本中将添加对其他类型的序列化的支持。 import org.
Spark 2.0(最终)与Scala 2.11.8。以下超级简单代码产生编译错误错误:(17,45)无法找到存储在数据集中的类型的编码器。通过导入spark.implicits._支持原始类型(Int,String等)和产品类型(案例类)。将来的版本中将添加对其他类型的序列化的支持。

import org.apache.spark.sql.SparkSession

case class SimpleTuple(id: Int,desc: String)

object DatasetTest {
  val dataList = List(
    SimpleTuple(5,"abc"),SimpleTuple(6,"bcd")
  )

  def main(args: Array[String]): Unit = {
    val sparkSession = SparkSession.builder.
      master("local")
      .appName("example")
      .getOrCreate()

    val dataset = sparkSession.createDataset(dataList)
  }
}

解决方法

Spark数据集要求编码器将要存储的数据类型。对于常见类型(原子,产品类型),有许多预定义的编码器可用,但您必须先从 SparkSession.implicits导入,以使其工作:

val sparkSession: SparkSession = ???
import sparkSession.implicits._
val dataset = sparkSession.createDataset(dataList)

进一步阅读:

>对于未由内置编码器覆盖的自定义对象,请参见How to store custom objects in a Dataset
>对于Row对象,必须显式提供Encoder,如Encoder error while trying to map dataframe row to updated row所示

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读