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

    https://github.com/apache/spark/pull/21912#discussion_r213542353
  
    --- Diff: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/collectionOperations.scala
 ---
    @@ -385,107 +385,120 @@ case class MapEntries(child: Expression) extends 
UnaryExpression with ExpectsInp
     
       override protected def doGenCode(ctx: CodegenContext, ev: ExprCode): 
ExprCode = {
         nullSafeCodeGen(ctx, ev, c => {
    +      val arrayData = ctx.freshName("arrayData")
           val numElements = ctx.freshName("numElements")
           val keys = ctx.freshName("keys")
           val values = ctx.freshName("values")
           val isKeyPrimitive = 
CodeGenerator.isPrimitiveType(childDataType.keyType)
           val isValuePrimitive = 
CodeGenerator.isPrimitiveType(childDataType.valueType)
    +
    +      val wordSize = UnsafeRow.WORD_SIZE
    +      val structSize = UnsafeRow.calculateBitSetWidthInBytes(2) + wordSize 
* 2
    +      val elementSize = if (isKeyPrimitive && isValuePrimitive) {
    +        Some(structSize + wordSize)
    +      } else {
    +        None
    +      }
    +
    +      val allocation = CodeGenerator.createArrayData(arrayData, 
childDataType.keyType, numElements,
    --- End diff --
    
    this is hacky. Actually we want to create an array of struct, but here we 
lied and say we want to create an array of key type.
    
    I think we should call `ArrayData.allocateArrayData` here directly.


---

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

Reply via email to