Skip to content
Snippets Groups Projects
Commit ed3cb1d2 authored by Sean Owen's avatar Sean Owen Committed by Xiangrui Meng
Browse files

[SPARK-9277] [MLLIB] SparseVector constructor must throw an error when...

[SPARK-9277] [MLLIB] SparseVector constructor must throw an error when declared number of elements less than array length

Check that SparseVector size is at least as big as the number of indices/values provided. And add tests for constructor checks.

CC MechCoder jkbradley -- I am not sure if a change needs to also happen in the Python API? I didn't see it had any similar checks to begin with, but I don't know it well.

Author: Sean Owen <sowen@cloudera.com>

Closes #7794 from srowen/SPARK-9277 and squashes the following commits:

e8dc31e [Sean Owen] Fix scalastyle
6ffe34a [Sean Owen] Check that SparseVector size is at least as big as the number of indices/values provided. And add tests for constructor checks.
parent a6e53a9c
No related branches found
No related tags found
No related merge requests found
...@@ -637,6 +637,8 @@ class SparseVector( ...@@ -637,6 +637,8 @@ class SparseVector(
require(indices.length == values.length, "Sparse vectors require that the dimension of the" + require(indices.length == values.length, "Sparse vectors require that the dimension of the" +
s" indices match the dimension of the values. You provided ${indices.length} indices and " + s" indices match the dimension of the values. You provided ${indices.length} indices and " +
s" ${values.length} values.") s" ${values.length} values.")
require(indices.length <= size, s"You provided ${indices.length} indices and values, " +
s"which exceeds the specified vector size ${size}.")
override def toString: String = override def toString: String =
s"($size,${indices.mkString("[", ",", "]")},${values.mkString("[", ",", "]")})" s"($size,${indices.mkString("[", ",", "]")},${values.mkString("[", ",", "]")})"
......
...@@ -57,6 +57,21 @@ class VectorsSuite extends SparkFunSuite with Logging { ...@@ -57,6 +57,21 @@ class VectorsSuite extends SparkFunSuite with Logging {
assert(vec.values === values) assert(vec.values === values)
} }
test("sparse vector construction with mismatched indices/values array") {
intercept[IllegalArgumentException] {
Vectors.sparse(4, Array(1, 2, 3), Array(3.0, 5.0, 7.0, 9.0))
}
intercept[IllegalArgumentException] {
Vectors.sparse(4, Array(1, 2, 3), Array(3.0, 5.0))
}
}
test("sparse vector construction with too many indices vs size") {
intercept[IllegalArgumentException] {
Vectors.sparse(3, Array(1, 2, 3, 4), Array(3.0, 5.0, 7.0, 9.0))
}
}
test("dense to array") { test("dense to array") {
val vec = Vectors.dense(arr).asInstanceOf[DenseVector] val vec = Vectors.dense(arr).asInstanceOf[DenseVector]
assert(vec.toArray.eq(arr)) assert(vec.toArray.eq(arr))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment