Uploaded image for project: 'Spark'
  1. Spark
  2. SPARK-15192

RowEncoder needs to verify nullability in a more explicit way

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 2.0.0
    • SQL
    • None

    Description

      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.

      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
      

      Attachments

        Issue Links

          Activity

            People

              cloud_fan Wenchen Fan
              yhuai Yin Huai
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: