msamirkhan commented on a change in pull request #29354:
URL: https://github.com/apache/spark/pull/29354#discussion_r466000797



##########
File path: 
external/avro/src/main/scala/org/apache/spark/sql/avro/SparkAvroDatumReader.scala
##########
@@ -638,90 +628,57 @@ class SparkAvroDatumReader[T](
 
   /** Helper functions to create objects */
 
-  private[this] def getRowCreator(st: StructType): () => InternalRow = {
-    val constructorsArray = new Array[() => MutableValue](st.fields.length)
-    var i = 0
-    while (i < st.fields.length) {
-      st.fields(i).dataType match {
-        case BooleanType => constructorsArray(i) = () => new MutableBoolean
-        case ByteType => constructorsArray(i) = () => new MutableByte
-        case ShortType => constructorsArray(i) = () => new MutableShort
-        // We use INT for DATE internally
-        case IntegerType | DateType => constructorsArray(i) = () => new 
MutableInt
-        // We use Long for Timestamp internally
-        case LongType | TimestampType => constructorsArray(i) = () => new 
MutableLong
-        case FloatType => constructorsArray(i) = () => new MutableFloat
-        case DoubleType => constructorsArray(i) = () => new MutableDouble
-        case _ => constructorsArray(i) = () => new MutableAny
-      }
-      i += 1
-    }
-    () => {
-      val array = new Array[MutableValue](constructorsArray.length)
-      var i = 0
-      while (i < constructorsArray.length) {
-        array(i) = constructorsArray(i).apply()
-        i += 1
-      }
-      new SpecificInternalRow(array)
+  private[this] def createArrayData(elementType: DataType, length: Long): 
ArrayData = {
+    elementType match {
+      case BooleanType => UnsafeArrayData.createFreshArray(length.toInt, 1)
+      case ByteType => UnsafeArrayData.createFreshArray(length.toInt, 1)
+      case ShortType => UnsafeArrayData.createFreshArray(length.toInt, 2)
+      case IntegerType => UnsafeArrayData.createFreshArray(length.toInt, 4)
+      case LongType => UnsafeArrayData.createFreshArray(length.toInt, 8)
+      case FloatType => UnsafeArrayData.createFreshArray(length.toInt, 4)
+      case DoubleType => UnsafeArrayData.createFreshArray(length.toInt, 8)
+      case _ => new GenericArrayData(new Array[Any](length.toInt))
     }
   }
 
-  private[this] def getArrayDataCreator(elementType: DataType):
-      Long => ArrayData = elementType match {
-    case BooleanType => length => 
UnsafeArrayData.createFreshArray(length.toInt, 1)
-    case ByteType => length => UnsafeArrayData.createFreshArray(length.toInt, 
1)
-    case ShortType => length => UnsafeArrayData.createFreshArray(length.toInt, 
2)
-    case IntegerType => length => 
UnsafeArrayData.createFreshArray(length.toInt, 4)
-    case LongType => length => UnsafeArrayData.createFreshArray(length.toInt, 
8)
-    case FloatType => length => UnsafeArrayData.createFreshArray(length.toInt, 
4)
-    case DoubleType => length => 
UnsafeArrayData.createFreshArray(length.toInt, 8)
-    case _ => length => new GenericArrayData(new Array[Any](length.toInt))
-  }
-
-  private[this] def getArrayDataExpander(elementType: DataType):
-      (ArrayDataUpdater, Long) => ArrayData = {
-    withArrayDataExpanderHelper {
-      elementType match {
-        case BooleanType => unsafeArrayDataExpander(1)
-        case ByteType => unsafeArrayDataExpander(1)
-        case ShortType => unsafeArrayDataExpander(2)
-        case IntegerType => unsafeArrayDataExpander(4)
-        case LongType => unsafeArrayDataExpander(8)
-        case FloatType => unsafeArrayDataExpander(4)
-        case DoubleType => unsafeArrayDataExpander(8)
-        case _ => (arrayData, expandBy) => {
-          val newLength = arrayData.numElements() + expandBy
-          val newArray = new Array[Any](newLength.toInt)
-          val oldArray = arrayData.asInstanceOf[GenericArrayData].array
-          System.arraycopy(oldArray, 0, newArray, 0, oldArray.length)
-          new GenericArrayData(newArray)
-        }
+  private[this] def expandArrayData(elementType: DataType, updater: 
ArrayDataUpdater,
+      expandBy: Long): ArrayData = withArrayDataExpanderHelper(updater, 
expandBy) {
+    elementType match {
+      case BooleanType => unsafeArrayDataExpander(1)
+      case ByteType => unsafeArrayDataExpander(1)
+      case ShortType => unsafeArrayDataExpander(2)
+      case IntegerType => unsafeArrayDataExpander(4)
+      case LongType => unsafeArrayDataExpander(8)
+      case FloatType => unsafeArrayDataExpander(4)
+      case DoubleType => unsafeArrayDataExpander(8)
+      case _ => (arrayData, expandBy) => {
+        val newLength = arrayData.numElements() + expandBy
+        val newArray = new Array[Any](newLength.toInt)
+        val oldArray = arrayData.asInstanceOf[GenericArrayData].array
+        System.arraycopy(oldArray, 0, newArray, 0, oldArray.length)
+        new GenericArrayData(newArray)
       }
     }
   }
 
-  private[this] def withArrayDataExpanderHelper(f: (ArrayData, Long) => 
ArrayData):
-      (ArrayDataUpdater, Long) => ArrayData = {
-    (updater, expandBy) => {
-      if (expandBy <= 0) {
-        updater.array
-      } else {
-        val newArray = f(updater.array, expandBy)
-        updater.array = newArray
-        newArray
-      }
+  private[this] def withArrayDataExpanderHelper(updater: ArrayDataUpdater, 
expandBy: Long)
+      (f: (ArrayData, Long) => ArrayData): ArrayData = {
+    if (expandBy <= 0) {
+      updater.array
+    } else {
+      val newArray = f(updater.array, expandBy)
+      updater.array = newArray
+      newArray
     }
   }
 
-  private[this] def unsafeArrayDataExpander(elementSize: Int): (ArrayData, 
Long) => ArrayData = {
-    (array, expandBy) => {
-      val newLength = array.numElements() + expandBy
-      val newArray = UnsafeArrayData.createFreshArray(newLength.toInt, 
elementSize)
-      val oldArray = array.asInstanceOf[UnsafeArrayData]
-      oldArray.copyTo(newArray)
-      newArray
-    }
+  private[this] def unsafeArrayDataExpander(elementSize: Int)
+      (array: ArrayData, expandBy: Long): ArrayData = {
+    val newLength = array.numElements() + expandBy
+    val newArray = UnsafeArrayData.createFreshArray(newLength.toInt, 
elementSize)
+    val oldArray = array.asInstanceOf[UnsafeArrayData]
+    oldArray.copyTo(newArray)
+    newArray
   }

Review comment:
       Simplifying array data creation and expansion.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



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

Reply via email to