由于 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(使用前将#替换为@)