diff --git a/core/src/main/scala/org/apache/spark/util/collection/ExternalSorter.scala b/core/src/main/scala/org/apache/spark/util/collection/ExternalSorter.scala
index 176f84fa2a0d..b159200d7922 100644
--- a/core/src/main/scala/org/apache/spark/util/collection/ExternalSorter.scala
+++ b/core/src/main/scala/org/apache/spark/util/collection/ExternalSorter.scala
@@ -368,8 +368,8 @@ private[spark] class ExternalSorter[K, V, C](
val bufferedIters = iterators.filter(_.hasNext).map(_.buffered)
type Iter = BufferedIterator[Product2[K, C]]
val heap = new mutable.PriorityQueue[Iter]()(new Ordering[Iter] {
- // Use the reverse of comparator.compare because PriorityQueue dequeues the max
- override def compare(x: Iter, y: Iter): Int = -comparator.compare(x.head._1, y.head._1)
+ // Use the reverse order because PriorityQueue dequeues the max
+ override def compare(x: Iter, y: Iter): Int = comparator.compare(y.head._1, x.head._1)
})
heap.enqueue(bufferedIters: _*) // Will contain only the iterators with hasNext = true
new Iterator[Product2[K, C]] {
diff --git a/mllib/src/main/scala/org/apache/spark/ml/image/HadoopUtils.scala b/mllib/src/main/scala/org/apache/spark/ml/image/HadoopUtils.scala
index 8c975a2fba8c..f1579ec5844a 100644
--- a/mllib/src/main/scala/org/apache/spark/ml/image/HadoopUtils.scala
+++ b/mllib/src/main/scala/org/apache/spark/ml/image/HadoopUtils.scala
@@ -42,9 +42,11 @@ private object RecursiveFlag {
val old = Option(hadoopConf.get(flagName))
hadoopConf.set(flagName, value.toString)
try f finally {
- old match {
- case Some(v) => hadoopConf.set(flagName, v)
- case None => hadoopConf.unset(flagName)
+ // avoid false positive of DLS_DEAD_LOCAL_STORE_IN_RETURN by SpotBugs
+ if (old.isDefined) {
+ hadoopConf.set(flagName, old.get)
+ } else {
+ hadoopConf.unset(flagName)
}
}
}
diff --git a/pom.xml b/pom.xml
index 4b4e6c13ea8f..66dfeadf6170 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2606,6 +2606,28 @@
+
+ com.github.spotbugs
+ spotbugs-maven-plugin
+ 3.1.3
+
+ ${basedir}/target/scala-${scala.binary.version}/classes
+ ${basedir}/target/scala-${scala.binary.version}/test-classes
+ Max
+ Low
+ true
+ FindPuzzlers
+ false
+
+
+
+
+ check
+
+ compile
+
+
+
diff --git a/resource-managers/kubernetes/core/pom.xml b/resource-managers/kubernetes/core/pom.xml
index a6dd47a6b7d9..920f0f6ebf2c 100644
--- a/resource-managers/kubernetes/core/pom.xml
+++ b/resource-managers/kubernetes/core/pom.xml
@@ -47,6 +47,12 @@
test
+
+ org.apache.spark
+ spark-tags_${scala.binary.version}
+ test-jar
+
+
io.fabric8
kubernetes-client
diff --git a/resource-managers/kubernetes/integration-tests/pom.xml b/resource-managers/kubernetes/integration-tests/pom.xml
index 520bda89e034..41a85544c86d 100644
--- a/resource-managers/kubernetes/integration-tests/pom.xml
+++ b/resource-managers/kubernetes/integration-tests/pom.xml
@@ -62,6 +62,11 @@
kubernetes-client
${kubernetes-client.version}
+
+ org.apache.spark
+ spark-tags_${scala.binary.version}
+ test-jar
+
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/collectionOperations.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/collectionOperations.scala
index 7c064a130ff3..83df2b8284ef 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/collectionOperations.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/collectionOperations.scala
@@ -523,7 +523,7 @@ trait ArraySortLike extends ExpectsInputTypes {
} else if (o2 == null) {
nullOrder
} else {
- -ordering.compare(o1, o2)
+ ordering.compare(o2, o1)
}
}
}
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/conditionalExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/conditionalExpressions.scala
index 77ac6c088022..1ce8693bca12 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/conditionalExpressions.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/conditionalExpressions.scala
@@ -294,7 +294,7 @@ object CaseWhen {
case cond :: value :: Nil => Some((cond, value))
case value :: Nil => None
}.toArray.toSeq // force materialization to make the seq serializable
- val elseValue = if (branches.size % 2 == 1) Some(branches.last) else None
+ val elseValue = if (branches.size % 2 != 0) Some(branches.last) else None
CaseWhen(cases, elseValue)
}
}
@@ -309,7 +309,7 @@ object CaseKeyWhen {
case Seq(cond, value) => Some((EqualTo(key, cond), value))
case Seq(value) => None
}.toArray.toSeq // force materialization to make the seq serializable
- val elseValue = if (branches.size % 2 == 1) Some(branches.last) else None
+ val elseValue = if (branches.size % 2 != 0) Some(branches.last) else None
CaseWhen(cases, elseValue)
}
}
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
index 383ebde3229d..f398b479dc27 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala
@@ -1507,7 +1507,7 @@ class AstBuilder(conf: SQLConf) extends SqlBaseBaseVisitor[AnyRef] with Logging
case "TIMESTAMP" =>
Literal(Timestamp.valueOf(value))
case "X" =>
- val padding = if (value.length % 2 == 1) "0" else ""
+ val padding = if (value.length % 2 != 0) "0" else ""
Literal(DatatypeConverter.parseHexBinary(padding + value))
case other =>
throw new ParseException(s"Literals of type '$other' are currently not supported.", ctx)