Я использую MLlib of Spark (v1.1.0) и Scala для кластеризации k-средних значений, применяемой к файлу с точками (долгота и широта). Мой файл содержит 4 поля, разделенных запятой (последние два - долгота и широта).
Вот пример кластеризации k-средних с использованием Spark: 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))))
Но когда я запускаю его в искровой оболочке, я получаю следующую ошибку:
ошибка: значение перегруженного метода, заполненное альтернативами: (значения: Array [Double]) org.apache.spark.mllib.linalg.Vector (firstValue: Double, otherValues: Double *) org.apache.spark.mllib.linalg.Vector не может применяться к (Array [(Double, Double)])
Итак, я не знаю, как преобразовать мой массив [(Double, Double)] в Array [Double]. Может быть, есть другой способ прочитать два поля и преобразовать их в RDD<Vector>
, какие-нибудь предложения?