hvanhovell commented on code in PR #39517: URL: https://github.com/apache/spark/pull/39517#discussion_r1068884900
########## sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/ScalaReflection.scala: ########## @@ -377,27 +408,96 @@ object ScalaReflection extends ScalaReflection { val getter = Invoke( KnownNotNull(input), field.name, - dataTypeFor(field.enc), - returnNullable = field.enc.nullable) + externalDataTypeFor(field.enc), + returnNullable = field.nullable) field.name -> serializerFor(field.enc, getter) } createSerializerForObject(input, serializedFields) + + case RowEncoder(fields) => + val serializedFields = fields.zipWithIndex.map { case (field, index) => + val fieldValue = serializerFor( + field.enc, + ValidateExternalType( + GetExternalRowField(input, index, field.name), + field.enc.dataType, + lenientExternalDataTypeFor(field.enc))) + + val convertedField = if (field.nullable) { + exprs.If( + Invoke(input, "isNullAt", BooleanType, exprs.Literal(index) :: Nil), + // Because we strip UDTs, `field.dataType` can be different from `fieldValue.dataType`. + // We should use `fieldValue.dataType` here. + exprs.Literal.create(null, fieldValue.dataType), + fieldValue + ) + } else { + AssertNotNull(fieldValue) + } + field.name -> convertedField + } + createSerializerForObject(input, serializedFields) } private def serializerForArray( - isArray: Boolean, elementEnc: AgnosticEncoder[_], - input: Expression): Expression = { - dataTypeFor(elementEnc) match { - case dt: ObjectType => - createSerializerForMapObjects(input, dt, serializerFor(elementEnc, _)) - case dt if isArray && elementEnc.isPrimitive => - createSerializerForPrimitiveArray(input, dt) - case dt => - createSerializerForGenericArray(input, dt, elementEnc.nullable) + elementNullable: Boolean, + input: Expression, + lenientSerialization: Boolean): Expression = { + // Default serializer for Seq and generic Arrays. This does not work for primitive arrays. Review Comment: I don't know. It was like that before this. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org