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: [email protected]
For additional commands, e-mail: [email protected]