【问题标题】:Spark Scala Vector Map ClassCastExceptionSpark Scala 矢量映射 ClassCastException
【发布时间】:2017-09-25 05:11:36
【问题描述】:

尝试使用 Spark for Scala 中的统计工具,但难以准备将要使用的向量。

val featuresrdd =   features.rdd.map{_.getAs[Vector]("features")}

featuresrdd: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] = MapPartitionsRDD[952] at map at <console>:82

这会生成一个“mllib.linalg.vector”类型的向量,但是在工具中使用它后,该向量已更改为“DenseVector”类型。

import org.apache.spark.mllib.linalg._
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.rdd.RDD

val correlMatrix: Matrix = Statistics.corr(featuresrdd, "pearson")

java.lang.ClassCastException: org.apache.spark.ml.linalg.DenseVector cannot be cast to org.apache.spark.mllib.linalg.Vector

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 正如我在您之前的问题中所指出的,您应该探索如何使用DataFrames(在spark.ml 包中)而不是RDDs 来做您需要做的事情。基于 RDD 的 API 几乎已被弃用。

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


【解决方案1】:

在ML中使用asML函数将旧Vector转换为新Vector:

val newMLFeaturesRDD = featuresrdd.map(_.asML)
val correlMatrix: Matrix = Statistics.corr(newMLFeaturesRDD , "pearson")

【讨论】:

  • 顺便说一句,当 OP 感觉舒服时,他可以使用一些惯用的 Scala:featuresrdd.map(_.asML)
  • @Vidya 当然,我改变了它。这是 Java 程序员在工作休息时写答案的结果:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多