Github user kiszk commented on a diff in the pull request:
https://github.com/apache/spark/pull/20984#discussion_r179920210
--- Diff:
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ArrayData.scala
---
@@ -164,3 +167,32 @@ 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 (idx < arrayData.numElements()) {
--- End diff --
Do we need a check `0 <= idx`, too? If so, it would be good to update a
message in the exception.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]