diff options
author | zsxwing <zsxwing@gmail.com> | 2014-06-08 14:18:52 -0700 |
---|---|---|
committer | Reynold Xin <rxin@apache.org> | 2014-06-08 14:18:52 -0700 |
commit | a71c6d1cf0bbc027f633a65042191cf2201330d6 (patch) | |
tree | 53eefb99ab7e0493b9c534e713c657826498e260 | |
parent | ee96e9406613e621837360b15c34ea7c7220a7a3 (diff) | |
download | spark-a71c6d1cf0bbc027f633a65042191cf2201330d6.tar.gz spark-a71c6d1cf0bbc027f633a65042191cf2201330d6.tar.bz2 spark-a71c6d1cf0bbc027f633a65042191cf2201330d6.zip |
SPARK-1628: Add missing hashCode methods in Partitioner subclasses
JIRA: https://issues.apache.org/jira/browse/SPARK-1628
Added `hashCode` in HashPartitioner, RangePartitioner, PythonPartitioner and PageRankUtils.CustomPartitioner.
Author: zsxwing <zsxwing@gmail.com>
Closes #549 from zsxwing/SPARK-1628 and squashes the following commits:
2620936 [zsxwing] SPARK-1628: Add missing hashCode methods in Partitioner subclasses
3 files changed, 20 insertions, 1 deletions
diff --git a/core/src/main/scala/org/apache/spark/Partitioner.scala b/core/src/main/scala/org/apache/spark/Partitioner.scala index 9155159cf6..01e918fabe 100644 --- a/core/src/main/scala/org/apache/spark/Partitioner.scala +++ b/core/src/main/scala/org/apache/spark/Partitioner.scala @@ -83,6 +83,8 @@ class HashPartitioner(partitions: Int) extends Partitioner { case _ => false } + + override def hashCode: Int = numPartitions } /** @@ -119,7 +121,7 @@ class RangePartitioner[K : Ordering : ClassTag, V]( } } - def numPartitions = partitions + def numPartitions = rangeBounds.length + 1 private val binarySearch: ((Array[K], K) => Int) = CollectionsUtils.makeBinarySearch[K] @@ -155,4 +157,17 @@ class RangePartitioner[K : Ordering : ClassTag, V]( case _ => false } + + + override def hashCode(): Int = { + val prime = 31 + var result = 1 + var i = 0 + while (i < rangeBounds.length) { + result = prime * result + rangeBounds(i).hashCode + i += 1 + } + result = prime * result + ascending.hashCode + result + } } diff --git a/core/src/main/scala/org/apache/spark/api/python/PythonPartitioner.scala b/core/src/main/scala/org/apache/spark/api/python/PythonPartitioner.scala index 95bec5030b..e230d222b8 100644 --- a/core/src/main/scala/org/apache/spark/api/python/PythonPartitioner.scala +++ b/core/src/main/scala/org/apache/spark/api/python/PythonPartitioner.scala @@ -50,4 +50,6 @@ private[spark] class PythonPartitioner( case _ => false } + + override def hashCode: Int = 31 * numPartitions + pyPartitionFunctionId.hashCode } diff --git a/examples/src/main/scala/org/apache/spark/examples/bagel/PageRankUtils.scala b/examples/src/main/scala/org/apache/spark/examples/bagel/PageRankUtils.scala index b97cb8fb02..e06f4dcd54 100644 --- a/examples/src/main/scala/org/apache/spark/examples/bagel/PageRankUtils.scala +++ b/examples/src/main/scala/org/apache/spark/examples/bagel/PageRankUtils.scala @@ -124,4 +124,6 @@ class CustomPartitioner(partitions: Int) extends Partitioner { c.numPartitions == numPartitions case _ => false } + + override def hashCode: Int = numPartitions } |