@@ -382,21 +382,26 @@ class SchemaRDD(
382382 private [sql] def javaToPython : JavaRDD [Array [Byte ]] = {
383383 import scala .collection .Map
384384
385- def toJava (obj : Any , dataType : DataType ): Any = dataType match {
386- case struct : StructType => rowToArray(obj.asInstanceOf [Row ], struct)
387- case array : ArrayType => obj match {
388- case seq : Seq [Any ] => seq.map(x => toJava(x, array.elementType)).asJava
389- case list : JList [_] => list.map(x => toJava(x, array.elementType)).asJava
390- case arr if arr != null && arr.getClass.isArray =>
391- arr.asInstanceOf [Array [Any ]].map(x => toJava(x, array.elementType))
392- case other => other
393- }
394- case mt : MapType => obj.asInstanceOf [Map [_, _]].map {
385+ def toJava (obj : Any , dataType : DataType ): Any = (obj, dataType) match {
386+ case (null , _) => null
387+
388+ case (obj : Row , struct : StructType ) => rowToArray(obj, struct)
389+
390+ case (seq : Seq [Any ], array : ArrayType ) =>
391+ seq.map(x => toJava(x, array.elementType)).asJava
392+ case (list : JList [_], array : ArrayType ) =>
393+ list.map(x => toJava(x, array.elementType)).asJava
394+ case (arr, array : ArrayType ) if arr.getClass.isArray =>
395+ arr.asInstanceOf [Array [Any ]].map(x => toJava(x, array.elementType))
396+
397+ case (obj : Map [_, _], mt : MapType ) => obj.map {
395398 case (k, v) => (k, toJava(v, mt.valueType)) // key should be primitive type
396399 }.asJava
400+
397401 // Pyrolite can handle Timestamp
398- case other => obj
402+ case ( other, _) => other
399403 }
404+
400405 def rowToArray (row : Row , structType : StructType ): Array [Any ] = {
401406 val fields = structType.fields.map(field => field.dataType)
402407 row.zip(fields).map {
0 commit comments