@@ -23,7 +23,7 @@ import scala.reflect.ClassTag
2323import org .apache .spark .SparkException
2424import org .apache .spark .sql .Row
2525import org .apache .spark .sql .catalyst .expressions ._
26- import org .apache .spark .sql .catalyst .util .{ArrayBasedMapData , DateTimeUtils , GenericArrayData }
26+ import org .apache .spark .sql .catalyst .util .{ArrayBasedMapData , ArrayData , DateTimeUtils , GenericArrayData }
2727import org .apache .spark .sql .catalyst .ScalaReflection
2828import org .apache .spark .sql .catalyst .analysis .GetColumnByOrdinal
2929import org .apache .spark .sql .catalyst .expressions .objects ._
@@ -122,28 +122,12 @@ object RowEncoder {
122122 case t @ ArrayType (et, cn) =>
123123 val cls = inputObject.dataType.asInstanceOf [ObjectType ].cls
124124 et match {
125- /*
126- case BooleanType | ByteType | ShortType | IntegerType | LongType | FloatType | DoubleType
127- if !cn && (
128- cls.isAssignableFrom(classOf[Array[Boolean]]) ||
129- cls.isAssignableFrom(classOf[Array[Byte]]) ||
130- cls.isAssignableFrom(classOf[Array[Short]]) ||
131- cls.isAssignableFrom(classOf[Array[Int]]) ||
132- cls.isAssignableFrom(classOf[Array[Long]]) ||
133- cls.isAssignableFrom(classOf[Array[Float]]) ||
134- cls.isAssignableFrom(classOf[Array[Double]])) =>
135- print(s"1@ET: $et, $cn, $cls\n")
125+ case BooleanType | ByteType | ShortType | IntegerType | LongType | FloatType | DoubleType =>
136126 StaticInvoke (
137- classOf[UnsafeArrayData ],
138- ArrayType(et, false ),
139- "fromPrimitiveArray ",
127+ classOf [ArrayData ],
128+ ObjectType ( classOf [ ArrayData ] ),
129+ " toArrayData " ,
140130 inputObject :: Nil )
141- */
142- case BooleanType | ByteType | ShortType | IntegerType | LongType | FloatType | DoubleType =>
143- NewInstance (
144- classOf [GenericArrayData ],
145- inputObject :: Nil ,
146- dataType = t)
147131 case _ => MapObjects (
148132 element => serializerFor(ValidateExternalType (element, et), et),
149133 inputObject,
@@ -211,8 +195,7 @@ object RowEncoder {
211195 // as java.lang.Object.
212196 case _ : DecimalType => ObjectType (classOf [java.lang.Object ])
213197 // In order to support both Array and Seq in external row, we make this as java.lang.Object.
214- case a @ ArrayType (et, cn) =>
215- ObjectType (classOf [java.lang.Object ])
198+ case _ : ArrayType => ObjectType (classOf [java.lang.Object ])
216199 case _ => externalDataTypeFor(dt)
217200 }
218201
0 commit comments