spark向量和scala不变向量之间的区别?

aydmsdu9  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(353)

我正在为scala中的spark 1.4编写一个项目,目前正在将初始输入数据转换为 spark.mllib.linalg.Vectors 以及 scala.immutable.Vector 我以后想在我的算法中使用它。有人能简单地解释一下两者的区别吗?在什么情况下,一个比另一个更有用?
谢谢您。

yqkkidmi

yqkkidmi1#

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。

相关问题