我正在使用 Spark (v1.1.0) 和 Scala 的 MLlib 对具有点(经度和纬度)的文件进行 k-means 聚类。我的文件包含用逗号分隔的 4 个字段(最后两个是经度和纬度)。
这里是使用 Spark 的 k-means 聚类示例: https ://spark.apache.org/docs/1.1.0/mllib-clustering.html
我想要做的是读取 HDFS 中特定目录中文件的最后两个字段,将它们转换为RDD<Vector>
o 在 KMeans 类中使用此方法:
train(RDD<Vector> data, int k, int maxIterations)
这是我的代码:
val data = sc.textFile("/user/test/location/*")
val parsedData = data.map(s => Vectors.dense(s.split(',').map(fields => (fields(2).toDouble,fields(3).toDouble))))
但是当我在 spark-shell 中运行它时,出现以下错误:
错误:重载方法值与替代方案密集:(值:Array [Double])org.apache.spark.mllib.linalg.Vector(firstValue:Double,otherValues:Double *)org.apache.spark.mllib.linalg.Vector不能应用于 (Array[(Double, Double)])
所以,我不知道如何将我的 Array[(Double, Double)] 转换为 Array[Double]。也许还有另一种方法可以读取这两个字段并将它们转换为RDD<Vector>
,有什么建议吗?