Github user maropu commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22260#discussion_r213536395
  
    --- Diff: 
sql/core/src/main/scala/org/apache/spark/sql/execution/ProjectionOverSchema.scala
 ---
    @@ -38,7 +38,7 @@ private[execution] case class 
ProjectionOverSchema(schema: StructType) {
           case GetArrayItem(child, arrayItemOrdinal) =>
             getProjection(child).map { projection => GetArrayItem(projection, 
arrayItemOrdinal) }
           case a: GetArrayStructFields =>
    -        getProjection(a.child).map(p => (p, p.dataType)).map {
    +        getProjection(a.child).map(p => (p, p.dataType)).collect {
    --- End diff --
    
    How about this? IMO `.collect` can't catch illegal inputs?
    ```
            getProjection(a.child).map(p => (p, p.dataType)).map {
              case (projection, ArrayType(projSchema @ StructType(_), _)) =>
                GetArrayStructFields(projection,
                  projSchema(a.field.name),
                  projSchema.fieldIndex(a.field.name),
                  projSchema.size,
                  a.containsNull)
              case _ =>
                sys.error("....")
            }
    ```


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to