【问题标题】:How to cast a variable of type ML sparse vector type to MLlib sparse vector type?如何将 ML 稀疏向量类型的变量转换为 MLlib 稀疏向量类型?
【发布时间】:2017-03-26 03:00:18
【问题描述】:

当我尝试从 Vector Transformer 的输出中创建标记点时,我遇到了以下问题:

  val realout = output.select("label","features").rdd.map(row => LabeledPoint
   row.getAs[Double]("label"),
row.getAs[org.apache.spark.mllib.linalg.SparseVector]("features")
))

我得到的错误是:

enter [error] (run-main-0) org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 13.0 failed 1 times, most recent failure: Lost task 0.0 in stage 13.0 (TID 13, localhost): java.lang.ClassCastException: org.apache.spark.ml.linalg.SparseVector cannot be cast to org.apache.spark.mllib.linalg.Vector
[error]     at DataCleaning$$anonfun$1.apply(DataCleaning.scala:107
[error]     at DataCleaning$$anonfun$1.apply(DataCleaning.scala:105)
[error] 
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
[error]
at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:462
[error]
atorg.apache.spark.storage.memory.MemoryStore.putIteratorAsValues(MemoryStore.scala:213)

我检查了链接1 中提供的解决方案,该解决方案解释了 spark 2.0.0 中向量的转换,但面临如下所述的编译错误,

object linalg is not a member of package org.apache.spark.ml

请帮助。谢谢!

【问题讨论】:

    标签: scala apache-spark machine-learning


    【解决方案1】:

    org.apache.spark.mllib.linalg.SparseVector 中有一个静态方法可以将新的 linalg 类型转换为 spark.mllib 类型,称为 fromML。它可用于将 ML 稀疏向量转换为 MLlib 稀疏向量。请记住,它只复制引用。

    你可以按如下方式使用它:

       val realout : RDD[LabeledPoint] = features1.rdd.map(row => LabeledPoint(row.getAs[Double]("label"), 
      SparseVector.fromML(row.getAs[org.apache.spark.ml.linalg.SparseVector]("features"))))
    

    参考 Spark 文档:https://spark.apache.org/docs/2.0.1/api/java/org/apache/spark/mllib/linalg/SparseVector.html

    附: -:此文档直接指向 Java,但我的示例代码使用 Scala。但是,它没有问题,因为 Scala 与 Java 兼容。这意味着您可以从另一种语言的方法中调用任何一种语言的方法。

    【讨论】:

    • @hshihab 没关系,因为 Scala 与 Java 兼容。因此,您可以在两种语言中使用上述方法。感谢您的关心。
    • @KarlHigley 谢谢
    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2017-03-26
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多