@@ -272,42 +272,40 @@ private[hive] object HadoopTableReader extends HiveInspectors {
272272 mutableRow : MutableRow ): Iterator [Row ] = {
273273
274274 val soi = deserializer.getObjectInspector().asInstanceOf [StructObjectInspector ]
275- val fieldRefsWithOrdinals = {
276- val allFieldRefs = soi.getAllStructFieldRefs
277- nonPartitionKeyAttrs.map { case (_, ordinal) => allFieldRefs(ordinal) -> ordinal }
278- }
275+ val (fieldRefs, fieldOrdinals) = nonPartitionKeyAttrs.map { case (attr, ordinal) =>
276+ soi.getStructFieldRef(attr.name) -> ordinal
277+ }.unzip
279278
280279 // Builds specific unwrappers ahead of time according to object inspector types to avoid pattern
281280 // matching and branching costs per row.
282- val unwrappers : Seq [(Any , MutableRow , Int ) => Unit ] =
283- soi.getAllStructFieldRefs.map {
284- _.getFieldObjectInspector match {
285- case oi : BooleanObjectInspector =>
286- (value : Any , row : MutableRow , ordinal : Int ) => row.setBoolean(ordinal, oi.get(value))
287- case oi : ByteObjectInspector =>
288- (value : Any , row : MutableRow , ordinal : Int ) => row.setByte(ordinal, oi.get(value))
289- case oi : ShortObjectInspector =>
290- (value : Any , row : MutableRow , ordinal : Int ) => row.setShort(ordinal, oi.get(value))
291- case oi : IntObjectInspector =>
292- (value : Any , row : MutableRow , ordinal : Int ) => row.setInt(ordinal, oi.get(value))
293- case oi : LongObjectInspector =>
294- (value : Any , row : MutableRow , ordinal : Int ) => row.setLong(ordinal, oi.get(value))
295- case oi : FloatObjectInspector =>
296- (value : Any , row : MutableRow , ordinal : Int ) => row.setFloat(ordinal, oi.get(value))
297- case oi : DoubleObjectInspector =>
298- (value : Any , row : MutableRow , ordinal : Int ) => row.setDouble(ordinal, oi.get(value))
299- case oi =>
300- (value : Any , row : MutableRow , ordinal : Int ) => row(ordinal) = unwrapData(value, oi)
301- }
302- }.toSeq
281+ val unwrappers : Seq [(Any , MutableRow , Int ) => Unit ] = fieldRefs.map {
282+ _.getFieldObjectInspector match {
283+ case oi : BooleanObjectInspector =>
284+ (value : Any , row : MutableRow , ordinal : Int ) => row.setBoolean(ordinal, oi.get(value))
285+ case oi : ByteObjectInspector =>
286+ (value : Any , row : MutableRow , ordinal : Int ) => row.setByte(ordinal, oi.get(value))
287+ case oi : ShortObjectInspector =>
288+ (value : Any , row : MutableRow , ordinal : Int ) => row.setShort(ordinal, oi.get(value))
289+ case oi : IntObjectInspector =>
290+ (value : Any , row : MutableRow , ordinal : Int ) => row.setInt(ordinal, oi.get(value))
291+ case oi : LongObjectInspector =>
292+ (value : Any , row : MutableRow , ordinal : Int ) => row.setLong(ordinal, oi.get(value))
293+ case oi : FloatObjectInspector =>
294+ (value : Any , row : MutableRow , ordinal : Int ) => row.setFloat(ordinal, oi.get(value))
295+ case oi : DoubleObjectInspector =>
296+ (value : Any , row : MutableRow , ordinal : Int ) => row.setDouble(ordinal, oi.get(value))
297+ case oi =>
298+ (value : Any , row : MutableRow , ordinal : Int ) => row(ordinal) = unwrapData(value, oi)
299+ }
300+ }
303301
304302 // Map each tuple to a row object
305303 iterator.map { value =>
306304 val raw = deserializer.deserialize(value)
307305 var i = 0
308- while (i < fieldRefsWithOrdinals .length) {
309- val fieldRef = fieldRefsWithOrdinals (i)._1
310- val fieldOrdinal = fieldRefsWithOrdinals (i)._2
306+ while (i < fieldRefs .length) {
307+ val fieldRef = fieldRefs (i)
308+ val fieldOrdinal = fieldOrdinals (i)
311309 val fieldValue = soi.getStructFieldData(raw, fieldRef)
312310 unwrappers(i)(fieldValue, mutableRow, fieldOrdinal)
313311 i += 1
0 commit comments