Yin Huai created SPARK-15192:
--------------------------------
Summary: RowEncoder needs to verify nullability in a more explicit
way
Key: SPARK-15192
URL: https://issues.apache.org/jira/browse/SPARK-15192
Project: Spark
Issue Type: Bug
Components: SQL
Reporter: Yin Huai
When we create a Dataset from an RDD of rows with a specific schema, if the
nullability of a value does not match the nullability defined in the schema, we
will throw an exception that is not easy to understand.
It will be good to verify the nullability in a more explicit way.
{code}
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
val schema = new StructType().add("a", StringType, false).add("b", StringType,
false)
val rdd = sc.parallelize(Row(null, "123") :: Row("234", null) :: Nil)
spark.createDataFrame(rdd, schema).show
java.lang.RuntimeException: Error while decoding: java.lang.NullPointerException
createexternalrow(if (isnull(input[0, string])) null else input[0,
string].toString, if (isnull(input[1, string])) null else input[1,
string].toString, StructField(a,StringType,false),
StructField(b,StringType,false))
:- if (isnull(input[0, string])) null else input[0, string].toString
: :- isnull(input[0, string])
: : +- input[0, string]
: :- null
: +- input[0, string].toString
: +- input[0, string]
+- if (isnull(input[1, string])) null else input[1, string].toString
:- isnull(input[1, string])
: +- input[1, string]
:- null
+- input[1, string].toString
+- input[1, string]
at
org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.fromRow(ExpressionEncoder.scala:244)
at
org.apache.spark.sql.Dataset$$anonfun$org$apache$spark$sql$Dataset$$execute$1$1$$anonfun$apply$13.apply(Dataset.scala:2119)
at
org.apache.spark.sql.Dataset$$anonfun$org$apache$spark$sql$Dataset$$execute$1$1$$anonfun$apply$13.apply(Dataset.scala:2119)
at
scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at
scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
at
scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
at scala.collection.mutable.ArrayOps$ofRef.map(ArrayOps.scala:186)
at
org.apache.spark.sql.Dataset$$anonfun$org$apache$spark$sql$Dataset$$execute$1$1.apply(Dataset.scala:2119)
at
org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:57)
at org.apache.spark.sql.Dataset.withNewExecutionId(Dataset.scala:2407)
at
org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$execute$1(Dataset.scala:2118)
at
org.apache.spark.sql.Dataset.org$apache$spark$sql$Dataset$$collect(Dataset.scala:2125)
at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:1859)
at org.apache.spark.sql.Dataset$$anonfun$head$1.apply(Dataset.scala:1858)
at org.apache.spark.sql.Dataset.withTypedCallback(Dataset.scala:2437)
at org.apache.spark.sql.Dataset.head(Dataset.scala:1858)
at org.apache.spark.sql.Dataset.take(Dataset.scala:2075)
at org.apache.spark.sql.Dataset.showString(Dataset.scala:239)
at org.apache.spark.sql.Dataset.show(Dataset.scala:530)
at org.apache.spark.sql.Dataset.show(Dataset.scala:490)
at org.apache.spark.sql.Dataset.show(Dataset.scala:499)
... 50 elided
Caused by: java.lang.NullPointerException
at
org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificSafeProjection.apply(Unknown
Source)
at
org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.fromRow(ExpressionEncoder.scala:241)
... 72 more
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]