2017-11-10 5 views
0

클러스터 센터와 관련된 ID가 무엇인지 알고 싶습니다. model.transform(dataset)은 예측 된 클러스터 ID를 내 데이터 포인트에 할당하고 model.clusterCenters.foreach(println)은 이러한 클러스터 센터를 인쇄하지만 클러스터 센터를 ID와 연관시키는 방법을 알 수는 없습니다. println 메소드 순서는 ID를 기준으로 정렬됩니다 나에게하지 않는 것Spark 2.0 - 클러스터 센터와 연결된 클러스터 ID를 얻는 방법

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

:

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) 

이상적으로, 나는 같은 출력을합니다. 나는 그것을 transform()에 DF로 model.clusterCenters 변환 시도,하지만 난 당신이 CLUSTER_ID 및 Cluster_center 내용을 기록하는 데이터를 저장하면 Array[org.apache.spark.ml.linalg.Vector]

답변

1

org.apache.spark.sql.Dataset[_]로 변환하는 방법을 알아낼 수 없었다. 파일을 읽을 수 있으며 원하는 출력을 볼 수 있습니다.

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

환상적으로 간단합니다! 많은 감사합니다! –

+0

@ BéatriceMoissinac, 우리는이 문제에 직면하여 소스 코드를 조사하고 발견했습니다. – Achyuth