Spark の MLlib (v1.1.0) と Scala を使用して、ポイント (経度と緯度) を含むファイルに k-means クラスタリングを適用しています。私のファイルには、コンマで区切られた 4 つのフィールドが含まれています (最後の 2 つは経度と緯度です)。
これは、Spark を使用した k-means クラスタリングの例です: https://spark.apache.org/docs/1.1.0/mllib-clustering.html
私がやりたいことは、HDFS の特定のディレクトリにあるファイルの最後の 2 つのフィールドを読み取り、それらをRDD<Vector>
KMeans クラスで次のメソッドを使用する o に変換することです。
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] に変換する方法がわかりません。2 つのフィールドを読み取って に変換する別の方法があるかもしれませんがRDD<Vector>
、何か提案はありますか?