spark Vectors 和 scala immutable Vector 之间的区别?

Difference between spark Vectors and scala immutable Vector?

我正在 Scala 中为 Spark 1.4 编写一个项目,目前正在将我的初始输入数据转换为 spark.mllib.linalg.Vectorsscala.immutable.Vector,我稍后想在我的算法中使用它们。谁能简单解释一下两者之间的区别,以及在什么情况下使用一个比另一个更有用?

谢谢。

spark.mllib.linalg.Vector 专为线性代数应用而设计。 mllib 提供了两种不同的实现 - DenseVectorSparseVector。虽然您可以使用 normsqdist 等有用的方法,但在其他方面却相当有限。

org.apache.spark.mllib.linalg 中的所有数据结构一样,它只能存储 64 位浮点数 (scala.Double)。

如果您打算使用 mllib,那么 spark.mllib.linalg.Vector 几乎是您唯一的选择。来自 mllib 的所有剩余数据结构,包括本地和分布式,都构建在 org.apache.spark.mllib.linalg.Vector.

之上

否则,scala.immutable.Vector 可能是更好的选择。它是一种通用的密集数据结构。

它可以存储任何类型的对象,所以你可以有 Vector[String] 例如。

因为它是 Traversable,所以您可以访问所有预期的方法,例如 mapflatMapreducefoldfilter

编辑:如果您需要代数运算并且不使用 org.apache.spark.mllib.linalg.distributed 中的任何数据结构,您可能更喜欢 breeze.linalg.Vector 而不是 spark.mllib.linalg.Vector.它支持更大的代数方法集,包括 dot 乘积,并提供典型集合 API。