@@ -24,6 +24,7 @@ import org.apache.spark.sql.catalyst.expressions.ArraySortLike.NullOrder
2424import org .apache .spark .sql .catalyst .expressions .codegen ._
2525import org .apache .spark .sql .catalyst .util .{ArrayData , GenericArrayData , MapData , TypeUtils }
2626import org .apache .spark .sql .types ._
27+ import org .apache .spark .unsafe .Platform
2728import org .apache .spark .unsafe .array .ByteArrayMethods
2829import org .apache .spark .unsafe .types .{ByteArray , UTF8String }
2930
@@ -197,14 +198,14 @@ case class MapEntries(child: Expression) extends UnaryExpression with ExpectsInp
197198 val byteArraySize = ctx.freshName(" byteArraySize" )
198199 val data = ctx.freshName(" byteArray" )
199200 val unsafeRow = ctx.freshName(" unsafeRow" )
200- val structSize = ctx.freshName(" structSize" )
201201 val unsafeArrayData = ctx.freshName(" unsafeArrayData" )
202202 val structsOffset = ctx.freshName(" structsOffset" )
203203 val calculateArraySize = " UnsafeArrayData.calculateSizeOfUnderlyingByteArray"
204204 val calculateHeader = " UnsafeArrayData.calculateHeaderPortionInBytes"
205205
206206 val baseOffset = Platform .BYTE_ARRAY_OFFSET
207207 val longSize = LongType .defaultSize
208+ val structSize = UnsafeRow .calculateBitSetWidthInBytes(2 ) + longSize * 2
208209 val keyTypeName = CodeGenerator .primitiveTypeName(childDataType.keyType)
209210 val valueTypeName = CodeGenerator .primitiveTypeName(childDataType.keyType)
210211
@@ -222,12 +223,11 @@ case class MapEntries(child: Expression) extends UnaryExpression with ExpectsInp
222223 }
223224
224225 s """
225- |final int $structSize = ${UnsafeRow .calculateBitSetWidthInBytes(2 ) + longSize * 2 };
226- |final long $byteArraySize = $calculateArraySize( $numElements, $longSize + $structSize);
227- |final int $structsOffset = $calculateHeader( $numElements) + $numElements * $longSize;
226+ |final long $byteArraySize = $calculateArraySize( $numElements, ${longSize + structSize});
228227 |if ( $byteArraySize > ${ByteArrayMethods .MAX_ROUNDED_ARRAY_LENGTH }) {
229228 | ${genCodeForAnyElements(ctx, keys, values, arrayData, numElements)}
230229 |} else {
230+ | final int $structsOffset = $calculateHeader( $numElements) + $numElements * $longSize;
231231 | final byte[] $data = new byte[(int) $byteArraySize];
232232 | UnsafeArrayData $unsafeArrayData = new UnsafeArrayData();
233233 | Platform.putLong( $data, $baseOffset, $numElements);
0 commit comments