@@ -382,21 +382,26 @@ class SchemaRDD(
382
382
private [sql] def javaToPython : JavaRDD [Array [Byte ]] = {
383
383
import scala .collection .Map
384
384
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 {
395
398
case (k, v) => (k, toJava(v, mt.valueType)) // key should be primitive type
396
399
}.asJava
400
+
397
401
// Pyrolite can handle Timestamp
398
- case other => obj
402
+ case ( other, _) => other
399
403
}
404
+
400
405
def rowToArray (row : Row , structType : StructType ): Array [Any ] = {
401
406
val fields = structType.fields.map(field => field.dataType)
402
407
row.zip(fields).map {
0 commit comments