由于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
用于类型化操作/自定义对象