Github user mn-mikke commented on a diff in the pull request:
https://github.com/apache/spark/pull/21704#discussion_r202001514
--- Diff:
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/complexTypeCreator.scala
---
@@ -179,11 +180,13 @@ case class CreateMap(children: Seq[Expression])
extends Expression {
if (children.size % 2 != 0) {
TypeCheckResult.TypeCheckFailure(
s"$prettyName expects a positive even number of arguments.")
- } else if (keys.map(_.dataType).distinct.length > 1) {
+ } else if (keys.length > 1 &&
+ keys.map(_.dataType).sliding(2, 1).exists { case Seq(t1, t2) =>
!t1.sameType(t2) }) {
TypeCheckResult.TypeCheckFailure(
"The given keys of function map should all be the same type, but
they are " +
keys.map(_.dataType.simpleString).mkString("[", ", ", "]"))
- } else if (values.map(_.dataType).distinct.length > 1) {
+ } else if (values.length > 1 &&
+ values.map(_.dataType).sliding(2, 1).exists { case Seq(t1, t2) =>
!t1.sameType(t2) }) {
--- End diff --
The checks for keys and values are very similar. Would it be possible to
separate the common logic into a private method?
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]