【问题标题】:Scala - Encoder missing for type stored in datasetScala - 存储在数据集中的类型缺少编码器
【发布时间】:2018-08-13 20:15:00
【问题描述】:

我正在尝试在 Scala 2.2 中运行以下命令

   val x_test0 = cn_train.map( { case row => row.toSeq.toArray } )

我不断收到以下错误

 error: Unable to find encoder for type stored in a Dataset.  Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._  Support for serializing other types will be added in future releases.

我已经通过以下命令导入了implicits._:

val spark = SparkSession.builder.getOrCreate()
import spark.implicits._

【问题讨论】:

  • 到底是哪一行?当您尝试创建未定义编码器的数据集时会显示此错误。
  • Scala 2.2 有点老了。您可能指的是 Spark 2.2.x?
  • 是的,对不起我的错误。它是 Spark 2.2.x。
  • 错误显示如下:错误:无法找到存储在数据集中的类型的编码器。通过导入 spark.implicits 支持原始类型(Int、String 等)和产品类型(案例类)。未来版本中将添加对序列化其他类型的支持。 val x_test0 = cn_train.map( { case row => row.toSeq.toArray } )
  • 错误信息告诉您不能将数组强制放入数据帧。试试cn_train.rdd.map{ row => row.toSeq.toArray },这至少会给你一个数组的RDD。这样就够了吗?

标签: scala apache-spark encoder


【解决方案1】:

错误消息告诉您它无法为异构Array 找到Encoder 以将其保存在Dataset 中。但是您可以像这样获得Arrays 中的RDD

cn_train.rdd.map{ row => row.toSeq.toArray }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 2012-02-23
    • 2017-12-27
    相关资源
    最近更新 更多