无法使用 scala 创建 org.apache.spark.sql.Row.自 Spark 2.X 以来无值



由于Spark 2.X无法创建org.apache.spark.sql.Row with scala。无值(Spark 1.6.X 可能)

Caused by: java.lang.RuntimeException: Error while encoding: java.lang.RuntimeException: scala.None$ is not a valid external type for schema of string

可重现的示例:

import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
spark.createDataFrame(
  sc.parallelize(Seq(Row(None))),
  StructType(Seq(StructField("v", StringType, true)))
).first

要点:https://gist.github.com/AleksandrPavlenko/bef1c34458883730cc319b2e7378c8c6

看起来它在 SPARK-15657 中被更改了(不确定,仍在尝试证明它)

这是 SPARK-19056 中所述的预期行为(行编码器应接受可选类型):

这是故意的。允许Option Row从未被记录下来,当我们将编码器框架应用于所有类型化操作时,会带来很多麻烦。从 Spark 2.0 开始,请将 Dataset 用于类型化操作/自定义对象

相关内容

  • 没有找到相关文章

最新更新