我正在为scala中的spark 1.4编写一个项目,目前正在将初始输入数据转换为 spark.mllib.linalg.Vectors 以及 scala.immutable.Vector 我以后想在我的算法中使用它。有人能简单地解释一下两者的区别吗?在什么情况下,一个比另一个更有用?谢谢您。
spark.mllib.linalg.Vectors
scala.immutable.Vector
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。
spark.mllib.linalg.Vector
mllib
DenseVector
SparseVector
norm
sqdist
org.apache.spark.mllib.linalg
scala.Double
org.apache.spark.mllib.linalg.Vector
Vector[String]
Traversable
map
flatMap
reduce
fold
filter
org.apache.spark.mllib.linalg.distributed
breeze.linalg.Vector
dot
1条答案
按热度按时间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。