Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22745#discussion_r227037566
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/JavaTypeInference.scala
 ---
    @@ -278,24 +278,20 @@ object JavaTypeInference {
     
           case _ if mapType.isAssignableFrom(typeToken) =>
             val (keyType, valueType) = mapKeyValueType(typeToken)
    -        val keyDataType = inferDataType(keyType)._1
    -        val valueDataType = inferDataType(valueType)._1
     
             val keyData =
               Invoke(
    -            MapObjects(
    +            UnresolvedMapObjects(
                   p => deserializerFor(keyType, Some(p)),
    -              Invoke(getPath, "keyArray", ArrayType(keyDataType)),
    -              keyDataType),
    +              UnresolvedGetArrayFromMap(getPath, GetArrayFromMap.Key())),
    --- End diff --
    
    Yea we can write eval and doGenCode from scratch. It's also more efficient 
since we can omit the useless try-catch in `Invoke`.
    
    e.g.
    ```
    // from UnaryExpression
    override def nullSafeEval(input: Any) = input.asInstanceOf[MapData].keys
    
    override def doGenCode = defineCodeGen(ctx, ev, c => s"$c.keys")
    ```


---

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

Reply via email to