从 spark 中的稀疏向量创建 LabeledPoint
Create LabeledPoint from sparse vector in spark
我使用 VectorAssembler 在 spark/scala 的 DataFrame 中创建了一个特征向量。到目前为止一切正常。现在我想从标签和稀疏向量创建 LabeledPoints。
val labeledPoints = featureDf.map{r=>
val label = r(0).toString.toDouble + r(1).toString.toDouble + r(2).toString.toDouble
val features = r(r.size-1)
LabeledPoint(label, Vectors.sparse(features))
}
但这不起作用。我收到编译错误。错误是:
overloaded method value sparse with alternatives:
(size: Int,elements: Iterable[(Integer,java.lang.Double)])org.apache.spark.mllib.linalg.Vector
<and>
(size: Int,elements: Seq[(Int, scala.Double)])org.apache.spark.mllib.linalg.Vector
<and>
(size: Int,indices: Array[Int],values:Array[scala.Double])org.apache.spark.mllib.linalg.Vector
cannot be applied to (Any)
我已经尝试用 val features = r(r.size-1).asInstanceOf[Vector]
等来转换矢量,但没有任何效果。有谁知道如何解决这个问题?
提前致谢!
这里需要的是Row.getAs
方法:
val features = r.getAs[org.apache.spark.mllib.linalg.SparseVector](r.size - 1)
它还支持按名称提取,因此假设您的列名为 features
:
r.getAs[org.apache.spark.mllib.linalg.SparseVector]("features")
我使用 VectorAssembler 在 spark/scala 的 DataFrame 中创建了一个特征向量。到目前为止一切正常。现在我想从标签和稀疏向量创建 LabeledPoints。
val labeledPoints = featureDf.map{r=>
val label = r(0).toString.toDouble + r(1).toString.toDouble + r(2).toString.toDouble
val features = r(r.size-1)
LabeledPoint(label, Vectors.sparse(features))
}
但这不起作用。我收到编译错误。错误是:
overloaded method value sparse with alternatives:
(size: Int,elements: Iterable[(Integer,java.lang.Double)])org.apache.spark.mllib.linalg.Vector
<and>
(size: Int,elements: Seq[(Int, scala.Double)])org.apache.spark.mllib.linalg.Vector
<and>
(size: Int,indices: Array[Int],values:Array[scala.Double])org.apache.spark.mllib.linalg.Vector
cannot be applied to (Any)
我已经尝试用 val features = r(r.size-1).asInstanceOf[Vector]
等来转换矢量,但没有任何效果。有谁知道如何解决这个问题?
提前致谢!
这里需要的是Row.getAs
方法:
val features = r.getAs[org.apache.spark.mllib.linalg.SparseVector](r.size - 1)
它还支持按名称提取,因此假设您的列名为 features
:
r.getAs[org.apache.spark.mllib.linalg.SparseVector]("features")