Skip to content

Commit 6271839

Browse files
committed
support MapType
1 parent c174e18 commit 6271839

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,5 +94,10 @@ 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 = true)
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+
})
98103
}

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -957,10 +957,18 @@ class DatasetSuite extends QueryTest with SharedSQLContext {
957957
assert(df6.schema(1).nullable == false)
958958
assert(df6.schema(2).nullable == false)
959959

960-
val df7 = Seq(TestDataPoint(1, 2.2, "a"), TestDataPoint(3, 4.4, "null")).toDF
961-
assert(df7.schema(0).nullable == false)
962-
assert(df7.schema(1).nullable == false)
963-
assert(df7.schema(2).nullable == true)
960+
val df7 = (Tuple1(Array(1, 2, 3)) :: Nil).toDF("a")
961+
assert(df7.schema(0).nullable == true)
962+
assert(df7.schema(0).dataType.asInstanceOf[ArrayType].containsNull == false)
963+
964+
val df8 = (Tuple1(Map(2 -> 3)) :: Nil).toDF("m")
965+
assert(df8.schema(0).nullable == true)
966+
assert(df8.schema(0).dataType.asInstanceOf[MapType].valueContainsNull == false)
967+
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)
964972
}
965973

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

0 commit comments

Comments
 (0)