spark Vectors 和 scala immutable Vector 之间的区别?
Difference between spark Vectors and scala immutable Vector?
我正在 Scala 中为 Spark 1.4 编写一个项目,目前正在将我的初始输入数据转换为 spark.mllib.linalg.Vectors
和 scala.immutable.Vector
,我稍后想在我的算法中使用它们。谁能简单解释一下两者之间的区别,以及在什么情况下使用一个比另一个更有用?
谢谢。
spark.mllib.linalg.Vector
专为线性代数应用而设计。 mllib
提供了两种不同的实现 - DenseVector
、SparseVector
。虽然您可以使用 norm
或 sqdist
等有用的方法,但在其他方面却相当有限。
与 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
等
编辑:如果您需要代数运算并且不使用 org.apache.spark.mllib.linalg.distributed
中的任何数据结构,您可能更喜欢 breeze.linalg.Vector
而不是 spark.mllib.linalg.Vector
.它支持更大的代数方法集,包括 dot
乘积,并提供典型集合 API。
我正在 Scala 中为 Spark 1.4 编写一个项目,目前正在将我的初始输入数据转换为 spark.mllib.linalg.Vectors
和 scala.immutable.Vector
,我稍后想在我的算法中使用它们。谁能简单解释一下两者之间的区别,以及在什么情况下使用一个比另一个更有用?
谢谢。
spark.mllib.linalg.Vector
专为线性代数应用而设计。 mllib
提供了两种不同的实现 - DenseVector
、SparseVector
。虽然您可以使用 norm
或 sqdist
等有用的方法,但在其他方面却相当有限。
与 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
等
编辑:如果您需要代数运算并且不使用 org.apache.spark.mllib.linalg.distributed
中的任何数据结构,您可能更喜欢 breeze.linalg.Vector
而不是 spark.mllib.linalg.Vector
.它支持更大的代数方法集,包括 dot
乘积,并提供典型集合 API。