val result = (schema1.keys ++ schema2.keys).
map(_.toLowerCase).
toList.distinct.
flatMap { (columnName: String) =>
val schema1FieldOpt: Option[(DataType, Boolean)] = schema1.get(columnName)
val schema2FieldOpt: Option[(DataType, Boolean)] = schema2.get(columnName)
println(schema1FieldOpt.getClass)
println(schema2FieldOpt.getClass)
if (schema1FieldOpt == schema2FieldOpt) None
else Some(columnName -> (schema1FieldOpt, schema2FieldOpt))
}.toMap
на выходе - HashMap. Я хочу добавить типизацию для result.
Пробовал такие трюки
// val result: HashMap[String, (Some[(DataType, Boolean)], Some[(DataType, Boolean)])]
// val result: HashMap[String, (Option[(DataType, Boolean)], Option[(DataType, Boolean)])]
В мапе, на выходе, вот такие элементы: st -> (Some((StringType,true)), None). То я и пробовал Optional/Some.
Но получаю следующую ошибку:
error: polymorphic expression cannot be instantiated to expected type;
found : [T, U]scala.collection.immutable.Map[T,U]
required: scala.collection.immutable.HashMap[String,(Option[(org.apache.spark.sql.types.DataType, Boolean)], Option[(org.apache.spark.sql.types.DataType, Boolean)])]
}.toMap
Подскажите, плз, как правильно такую движуху затипизировать?
Idea сама может вывести тип
Почему думаешь, что вернётся HashMap? Посмотри, что возвращает .toMap
С нё снимут санкции
спасибо за подсказку! я код писал на датабрикс ноутбуке, выводил тип, то показалось что это реализация HashMap, а не интерфейс Map по-факту, оказалось так val result: Map[String, (Option[(DataType, Boolean)], Option[(DataType, Boolean)])]
Не для того санкции накладывают, чтоб снимать))
Обсуждают сегодня