Spark 2.0 - 如何获取Cluster Center关联的Cluster ID
Spark 2.0 - How to obtain Cluster ID associated with Cluster Center
我想知道与集群中心关联的 ID 是什么。 model.transform(dataset)
会为我的数据点分配一个预测的聚类 ID,model.clusterCenters.foreach(println)
会打印这些聚类中心,但我不知道如何将聚类中心与其 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顺序好像不是按ID排序的。我尝试将 model.clusterCenters
转换为 DF 到 transform()
,但我无法弄清楚如何将 Array[org.apache.spark.ml.linalg.Vector]
转换为 org.apache.spark.sql.Dataset[_]
保存数据后,它将写入 cluster_id 和 Cluster_center。可以读取文件,可以看到想要的输出
model.save(sc, "/user/hadoop/kmeanModel")
val parq = sqlContext.read.parquet("/user/hadoop/kmeanModel/data/*")
parq.collect.foreach(println)
我想知道与集群中心关联的 ID 是什么。 model.transform(dataset)
会为我的数据点分配一个预测的聚类 ID,model.clusterCenters.foreach(println)
会打印这些聚类中心,但我不知道如何将聚类中心与其 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顺序好像不是按ID排序的。我尝试将 model.clusterCenters
转换为 DF 到 transform()
,但我无法弄清楚如何将 Array[org.apache.spark.ml.linalg.Vector]
转换为 org.apache.spark.sql.Dataset[_]
保存数据后,它将写入 cluster_id 和 Cluster_center。可以读取文件,可以看到想要的输出
model.save(sc, "/user/hadoop/kmeanModel")
val parq = sqlContext.read.parquet("/user/hadoop/kmeanModel/data/*")
parq.collect.foreach(println)