【问题标题】:How to convert an RDD to Vector in Spark如何在 Spark 中将 RDD 转换为 Vector
【发布时间】:2015-10-28 16:18:47
【问题描述】:

我有一个 RDD[(Int,Double)] 类型的 RDD,其中对的第一个元素是索引,第二个是值,我想将此 RDD 转换为向量以用于分类.有人可以帮我吗?

我有以下代码,但它不工作

  def vectorize(x:RDD[(Int,Double)], size: Int):Vector = {
   val vec = Vectors.sparse(size,x)
 }

【问题讨论】:

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


    【解决方案1】:

    由于org.apache.spark.mllib.linalg.Vector 是一个本地数据结构,您必须收集数据。

    def vectorize(x:RDD[(Int,Double)], size: Int):Vector = {
      Vectors.sparse(size, x.collect)
    }
    

    由于没有数据分布,您必须确保输出适合驱动程序内存。

    一般来说这个操作不是特别有用。如果您的数据可以使用本地数据结构轻松处理,那么它可能一开始就不应该存储在 RDD 中。

    【讨论】:

    • 这是进行这种转换的唯一方法吗?
    • 如果您询问 collect 部分,那么只要您需要 Vector 作为输出,那么答案是肯定的。
    • 不,我问的是我唯一能将RDD转换为Vector的方法?
    • 只有合理的。 collect 的输出具有正确的类型,因此这里实际上没有其他事情可做。所以collect 是您的代码中唯一缺少的部分。
    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2015-02-27
    • 2021-11-30
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多