Skip to content

Commit e9202ce

Browse files
committed
fix test failures for handling Map with primitive types
1 parent 6271839 commit e9202ce

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/objects/objects.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,14 @@ case class ExternalMapToCatalyst private(
603603

604604
override def foldable: Boolean = false
605605

606-
override def dataType: MapType = MapType(keyConverter.dataType, valueConverter.dataType)
606+
override def dataType: MapType = {
607+
val isPrimitiveType = valueType match {
608+
case BooleanType | ByteType | ShortType | IntegerType | LongType |
609+
FloatType | DoubleType => true
610+
case _ => false
611+
}
612+
MapType(keyConverter.dataType, valueConverter.dataType, !isPrimitiveType)
613+
}
607614

608615
override def eval(input: InternalRow): Any =
609616
throw new UnsupportedOperationException("Only code-generated evaluation is supported")

sql/catalyst/src/main/scala/org/apache/spark/sql/types/MapType.scala

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,5 @@ object MapType extends AbstractDataType {
9494
* The `valueContainsNull` is true.
9595
*/
9696
def apply(keyType: DataType, valueType: DataType): MapType =
97-
MapType(keyType: DataType, valueType: DataType, valueContainsNull =
98-
valueType match {
99-
case BooleanType | ByteType | ShortType | IntegerType | LongType |
100-
FloatType | DoubleType => false
101-
case _ => true
102-
})
97+
MapType(keyType: DataType, valueType: DataType, valueContainsNull = true)
10398
}

sql/core/src/test/scala/org/apache/spark/sql/DatasetSuite.scala

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -961,14 +961,22 @@ class DatasetSuite extends QueryTest with SharedSQLContext {
961961
assert(df7.schema(0).nullable == true)
962962
assert(df7.schema(0).dataType.asInstanceOf[ArrayType].containsNull == false)
963963

964-
val df8 = (Tuple1(Map(2 -> 3)) :: Nil).toDF("m")
964+
val df8 = (Tuple1(Array((null: Integer), (null: Integer))) :: Nil).toDF("a")
965965
assert(df8.schema(0).nullable == true)
966-
assert(df8.schema(0).dataType.asInstanceOf[MapType].valueContainsNull == false)
966+
assert(df8.schema(0).dataType.asInstanceOf[ArrayType].containsNull == true)
967967

968-
val df9 = Seq(TestDataPoint(1, 2.2, "a"), TestDataPoint(3, 4.4, "null")).toDF
969-
assert(df9.schema(0).nullable == false)
970-
assert(df9.schema(1).nullable == false)
971-
assert(df9.schema(2).nullable == true)
968+
val df9 = (Tuple1(Map(2 -> 3)) :: Nil).toDF("m")
969+
assert(df9.schema(0).nullable == true)
970+
assert(df9.schema(0).dataType.asInstanceOf[MapType].valueContainsNull == false)
971+
972+
val df10 = (Tuple1(Map(1 -> (null: Integer))) :: Nil).toDF("m")
973+
assert(df10.schema(0).nullable == true)
974+
assert(df10.schema(0).dataType.asInstanceOf[MapType].valueContainsNull == true)
975+
976+
val df11 = Seq(TestDataPoint(1, 2.2, "a"), TestDataPoint(3, 4.4, "null")).toDF
977+
assert(df11.schema(0).nullable == false)
978+
assert(df11.schema(1).nullable == false)
979+
assert(df11.schema(2).nullable == true)
972980
}
973981

974982
Seq(true, false).foreach { eager =>

0 commit comments

Comments
 (0)