Github user viirya commented on a diff in the pull request: https://github.com/apache/spark/pull/20984#discussion_r180357829 --- Diff: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ArrayData.scala --- @@ -164,3 +167,37 @@ abstract class ArrayData extends SpecializedGetters with Serializable { } } } + +class ArrayDataIndexedSeq[T](arrayData: ArrayData, dataType: DataType) extends IndexedSeq[T] { + + private lazy val accessor: (Int) => Any = dataType match { + case BooleanType => (idx: Int) => arrayData.getBoolean(idx) + case ByteType => (idx: Int) => arrayData.getByte(idx) + case ShortType => (idx: Int) => arrayData.getShort(idx) + case IntegerType => (idx: Int) => arrayData.getInt(idx) + case LongType => (idx: Int) => arrayData.getLong(idx) + case FloatType => (idx: Int) => arrayData.getFloat(idx) + case DoubleType => (idx: Int) => arrayData.getDouble(idx) + case d: DecimalType => (idx: Int) => arrayData.getDecimal(idx, d.precision, d.scale) + case CalendarIntervalType => (idx: Int) => arrayData.getInterval(idx) + case StringType => (idx: Int) => arrayData.getUTF8String(idx) + case BinaryType => (idx: Int) => arrayData.getBinary(idx) + case s: StructType => (idx: Int) => arrayData.getStruct(idx, s.length) + case _: ArrayType => (idx: Int) => arrayData.getArray(idx) + case _: MapType => (idx: Int) => arrayData.getMap(idx) + case _ => (idx: Int) => arrayData.get(idx, dataType) + } + + override def apply(idx: Int): T = if (0 <= idx && idx < arrayData.numElements()) { + if (arrayData.isNullAt(idx)) { + null.asInstanceOf[T] --- End diff -- For primitive ArrayData, this seems to be an issue for null elements...
--- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org