为啥从 Spark 1.0.1 开始出现 KMeansModel.predict 错误?

Posted

技术标签:

【中文标题】为啥从 Spark 1.0.1 开始出现 KMeansModel.predict 错误?【英文标题】:Why KMeansModel.predict error has started to appear since Spark 1.0.1.?为什么从 Spark 1.0.1 开始出现 KMeansModel.predict 错误? 【发布时间】:2014-09-17 07:21:43 【问题描述】:

我使用Scala(2.10.4 版本)和Spark - 我已移至Spark 1.0.1。版本并注意到我的一个脚本现在无法正常工作。它以下列方式使用 MLlib 库中的 k-means 方法。

假设我有一个名为 clustersKMeansModel 对象:

scala> clusters.toString
res8: String = org.apache.spark.mllib.clustering.KMeansModel@689eab53

这是我有问题的方法以及我在尝试编译时收到的错误:

scala> def clustersSize(normData: RDD[Array[Double]]) = 
 |   normData.map(r => clusters.predict(r))
 | 

<console>:28: error: overloaded method value predict with alternatives:
  (points: org.apache.spark.api.java.JavaRDD[org.apache.spark.mllib.linalg.Vector])org.apache.spark.api.java.JavaRDD[Integer] <and>
  (points: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector])org.apache.spark.rdd.RDD[Int] <and>
  (point: org.apache.spark.mllib.linalg.Vector)Int
 cannot be applied to (Array[Double])
     normData.map(r => clusters.predict(r))

KMeansModel documentation 明确表示predict 函数需要Array[Double] 类型的参数,我想我确实(不是吗?)给它一个这种类型的参数。预先感谢您对我做错了什么提出任何建议。

【问题讨论】:

【参考方案1】:

您使用的是 Spark 1.0.1,但您引用的文档页面适用于 0.9.0。检查current documentation,您会看到API 已更改。背景见the migration guide。

【讨论】:

以上是关于为啥从 Spark 1.0.1 开始出现 KMeansModel.predict 错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥从 Redshift 读取到 Spark 如此缓慢?

为啥从 Spark 写入 Vertica DB 比从 Spark 写入 MySQL 需要更长的时间?

《从0开始学大数据》之Spark的编程模型

为啥 spark 无法使用 getOrCreate 从检查点恢复

为啥 Spark 不能从 HDFS 正确加载列? [复制]

为啥 Spark 作业失败并显示“退出代码:52”