2017-11-10 221 views
0

我想知道與羣集中心關聯的ID是什麼。 model.transform(dataset)將爲我的數據點分配預測的羣集ID,並且model.clusterCenters.foreach(println)將打印這些羣集中心,但我無法弄清楚如何將羣集中心與其ID相關聯。Spark 2.0 - 如何獲取與羣集中心關聯的羣集ID

import org.apache.spark.ml.clustering.KMeans 

// Loads data. 
val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt") 

// Trains a k-means model. 
val kmeans = new KMeans().setK(2).setSeed(1L) 
val model = kmeans.fit(dataset) 
val prediction = model.transform(dataset) 

// Shows the result. 
println("Cluster Centers: ") 
model.clusterCenters.foreach(println) 

理想情況下,我想的輸出,諸如:

|I.D  |cluster center | 
========================== 
|0  |[0.0,...,0.3] | 
|2  |[1.0,...,1.3] | 
|1  |[2.0,...,1.3] | 
|3  |[3.0,...,1.3] | 

這在我看來,不說println的順序是由編號的順序排列。我試着將它轉換model.clusterCenters成DF到transform(),但我無法弄清楚如何轉換Array[org.apache.spark.ml.linalg.Vector]org.apache.spark.sql.Dataset[_]

回答

1

一旦你救了它會寫CLUSTER_ID和Cluster_center數據。您可以閱讀該文件,可以看到所需的輸出

model.save(sc, "/user/hadoop/kmeanModel") 
    val parq = sqlContext.read.parquet("/user/hadoop/kmeanModel/data/*") 
    parq.collect.foreach(println) 
+0

非常簡單!非常感謝! –

+0

@BéatriceMoissinac,我們遇到了這個問題,查看了源代碼並發現了它。 – Achyuth