从 Spark 2.X 开始,无法使用 scala.None 值创建 org.apache.spark.sql.Row

2024-01-11

由于 Spark 2.X 无法使用 scala.None 值创建 org.apache.spark.sql.Row (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

Gist: https://gist.github.com/AleksandrPavlenko/bef1c34458883730cc319b2e7378c8c6 https://gist.github.com/AleksandrPavlenko/bef1c34458883730cc319b2e7378c8c6

看起来它被改变了SPARK-15657 https://issues.apache.org/jira/browse/SPARK-15657(不确定,仍在尝试证明)


这是预期的行为,如中所述SPARK-19056 https://issues.apache.org/jira/browse/SPARK-19056 (行编码器应该接受可选类型):

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Spark 2.X 开始,无法使用 scala.None 值创建 org.apache.spark.sql.Row 的相关文章

随机推荐