aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzsxwing <zsxwing@gmail.com>2014-06-08 14:18:52 -0700
committerReynold Xin <rxin@apache.org>2014-06-08 14:18:52 -0700
commita71c6d1cf0bbc027f633a65042191cf2201330d6 (patch)
tree53eefb99ab7e0493b9c534e713c657826498e260
parentee96e9406613e621837360b15c34ea7c7220a7a3 (diff)
downloadspark-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
-rw-r--r--core/src/main/scala/org/apache/spark/Partitioner.scala17
-rw-r--r--core/src/main/scala/org/apache/spark/api/python/PythonPartitioner.scala2
-rw-r--r--examples/src/main/scala/org/apache/spark/examples/bagel/PageRankUtils.scala2
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
}