gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:05:19 26 4
gpt4 key购买 nike

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

谢谢。

最佳答案

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

由于 org.apache.spark.mllib.linalg 中的所有数据结构,它只能存储 64 位 float (scala.Double)。

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

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

它可以存储任何类型的对象,例如,您可以使用 Vector[String]

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

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

关于scala - spark Vectors 和 scala immutable Vector 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com