diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala index fcd533dc5f..78bfdccc02 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/predicates.scala @@ -612,26 +612,27 @@ case class InSet(child: Expression, hset: Set[Any]) extends UnaryExpression with "" } - val ret = child.dataType match { + val isNaNCode = child.dataType match { case DoubleType => Some((v: Any) => s"java.lang.Double.isNaN($v)") case FloatType => Some((v: Any) => s"java.lang.Float.isNaN($v)") case _ => None } - ret.map { isNaN => + if (hasNaN && isNaNCode.isDefined) { s""" - |if ($setTerm.contains($c)) { - | ${ev.value} = true; - |} else if (${isNaN(c)}) { - | ${ev.value} = $hasNaN; - |} - |$setIsNull - |""".stripMargin - }.getOrElse( + |if ($setTerm.contains($c)) { + | ${ev.value} = true; + |} else if (${isNaNCode.get(c)}) { + | ${ev.value} = true; + |} + |$setIsNull + """.stripMargin + } else { s""" |${ev.value} = $setTerm.contains($c); |$setIsNull - """.stripMargin) + """.stripMargin + } }) }