Tôi đang cố triển khai KMeans using Apache Spark
.Cách chuyển đổi org.apache.spark.rdd.RDD [Array [Double]] thành Array [Double] được yêu cầu bởi Spark MLlib
val data = sc.textFile(irisDatasetString)
val parsedData = data.map(_.split(',').map(_.toDouble)).cache()
val clusters = KMeans.train(parsedData,3,numIterations = 20)
mà tôi nhận được lỗi sau:
error: overloaded method value train with alternatives:
(data: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector],k: Int,maxIterations: Int,runs: Int)org.apache.spark.mllib.clustering.KMeansModel <and>
(data: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector],k: Int,maxIterations: Int)org.apache.spark.mllib.clustering.KMeansModel <and>
(data: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector],k: Int,maxIterations: Int,runs: Int,initializationMode: String)org.apache.spark.mllib.clustering.KMeansModel
cannot be applied to (org.apache.spark.rdd.RDD[Array[Double]], Int, numIterations: Int)
val clusters = KMeans.train(parsedData,3,numIterations = 20)
vì vậy tôi cố gắng chuyển đổi Array [đúp] để vector như here
scala> val vectorData: Vector = Vectors.dense(parsedData)
trên mà tôi nhận được lỗi sau:
error: type Vector takes type parameters
val vectorData: Vector = Vectors.dense(parsedData)
^
error: overloaded method value dense with alternatives:
(values: Array[Double])org.apache.spark.mllib.linalg.Vector <and>
(firstValue: Double,otherValues: Double*)org.apache.spark.mllib.linalg.Vector
cannot be applied to (org.apache.spark.rdd.RDD[Array[Double]])
val vectorData: Vector = Vectors.dense(parsedData)
Vì vậy, tôi suy luận rằng org.apache.spark.rdd.RDD[Array[Double]]
là không giống như Array [đúp]
Làm thế nào tôi có thể tiến hành với dữ liệu của tôi như org.apache.spark.rdd.RDD[Array[Double]]
? hoặc làm cách nào để tôi có thể chuyển đổi org.apache.spark.rdd.RDD[Array[Double]] to Array[Double]
?
Không, đó không hoạt động. Tôi nhận được lỗi sau: lỗi: thiếu kiểu tham số cho hàm mở rộng ((x $ 1) => x $ 1.split (','). Map (((x $ 2) => x $ 2.toDouble))) val parsedData = data.map (Vectors.dense (_. split (','). map (_. toDouble))). cache() – sand
@sand Xem phần chỉnh sửa của tôi. Tôi đã sai cú pháp Scala. – climbage
Tôi cũng đã thử điều đó. Vì vậy, tôi nhận được phân tích cú phápData loại: 'org.apache.spark.rdd.RDD [org.apache.spark.mllib.linalg.Vector]' mà sau đó tôi cố gắng chuyển đổi sang một Vector bằng cách sử dụng: 'val dataArray = parsedData.collect val dataVector = Vectors.dense (dataArray) 'không hoạt động vì dataArray của tôi là' Array [org.apache.spark.mllib.linalg.Vector] 'và' Vector.dense' mong đợi một 'Array [Double]' – sand