@@ -129,25 +129,23 @@ private[parquet] object ParquetTypesConverter extends Logging {
129129 assert(
130130 keyValueGroup.getFieldCount == 2 ,
131131 " Parquet Map type malformatted: nested group should have 2 (key, value) fields!" )
132- val keyType = toDataType(keyValueGroup.getFields.apply(0 ), isBinaryAsString)
133132 assert(keyValueGroup.getFields.apply(0 ).getRepetition == Repetition .REQUIRED )
133+
134+ val keyType = toDataType(keyValueGroup.getFields.apply(0 ), isBinaryAsString)
134135 val valueType = toDataType(keyValueGroup.getFields.apply(1 ), isBinaryAsString)
135- assert(keyValueGroup.getFields.apply(1 ).getRepetition == Repetition .REQUIRED )
136- // TODO: set valueContainsNull explicitly instead of assuming valueContainsNull is true
137- // at here.
138- MapType (keyType, valueType)
136+ MapType (keyType, valueType,
137+ keyValueGroup.getFields.apply(1 ).getRepetition != Repetition .REQUIRED )
139138 }
140139 case _ => {
141140 // Note: the order of these checks is important!
142141 if (correspondsToMap(groupType)) { // MapType
143142 val keyValueGroup = groupType.getFields.apply(0 ).asGroupType()
144- val keyType = toDataType(keyValueGroup.getFields.apply(0 ), isBinaryAsString)
145143 assert(keyValueGroup.getFields.apply(0 ).getRepetition == Repetition .REQUIRED )
144+
145+ val keyType = toDataType(keyValueGroup.getFields.apply(0 ), isBinaryAsString)
146146 val valueType = toDataType(keyValueGroup.getFields.apply(1 ), isBinaryAsString)
147- assert(keyValueGroup.getFields.apply(1 ).getRepetition == Repetition .REQUIRED )
148- // TODO: set valueContainsNull explicitly instead of assuming valueContainsNull is true
149- // at here.
150- MapType (keyType, valueType)
147+ MapType (keyType, valueType,
148+ keyValueGroup.getFields.apply(1 ).getRepetition != Repetition .REQUIRED )
151149 } else if (correspondsToArray(groupType)) { // ArrayType
152150 val elementType = toDataType(groupType.getFields.apply(0 ), isBinaryAsString)
153151 ArrayType (elementType, containsNull = false )
@@ -255,7 +253,7 @@ private[parquet] object ParquetTypesConverter extends Logging {
255253 }
256254 new ParquetGroupType (repetition, name, fields)
257255 }
258- case MapType (keyType, valueType, _ ) => {
256+ case MapType (keyType, valueType, valueContainsNull ) => {
259257 val parquetKeyType =
260258 fromDataType(
261259 keyType,
@@ -266,7 +264,7 @@ private[parquet] object ParquetTypesConverter extends Logging {
266264 fromDataType(
267265 valueType,
268266 CatalystConverter .MAP_VALUE_SCHEMA_NAME ,
269- nullable = false ,
267+ nullable = valueContainsNull ,
270268 inArray = false )
271269 ConversionPatterns .mapType(
272270 repetition,
0 commit comments