【问题标题】:Difference between spark Vectors and scala immutable Vector?spark向量和scala不可变向量之间的区别?
【发布时间】:2023-03-03 10:56:01
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: scala hadoop apache-spark apache-spark-mllib


    【解决方案1】:

    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,所以您可以访问所有预期的方法,例如mapflatMapreducefoldfilter 等。

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

    【讨论】:

    • @zero323 很酷的评论已删除,所以现在只有 NSA 知道,我也会尽快删除这条评论 :)
    猜你喜欢
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2010-11-01
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多