spark Vector和scala不可变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,您可以访问所有期望的方法,如map, flatMap, reduce, fold, filter等。

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

最新更新