使用Apache Spark提取kmeans集群信息

时间:2015-02-26 13:07:15

标签: scala apache-spark

我已经在

实施了Apache Spark示例

https://spark.apache.org/docs/1.1.0/mllib-clustering.html#examples

以下是来源:

import org.apache.spark.mllib.clustering.KMeans
import org.apache.spark.mllib.linalg.Vectors

// Load and parse the data
val data = sc.textFile("data/mllib/kmeans_data.txt")
val parsedData = data.map(s => Vectors.dense(s.split(' ').map(_.toDouble)))

// Cluster the data into two classes using KMeans
val numClusters = 2
val numIterations = 20
val clusters = KMeans.train(parsedData, numClusters, numIterations)

// Evaluate clustering by computing Within Set Sum of Squared Errors
val WSSSE = clusters.computeCost(parsedData)
println("Within Set Sum of Squared Errors = " + WSSSE)

使用数据集:

0.0 0.0 0.0
0.1 0.1 0.1
0.2 0.2 0.2
9.0 9.0 9.0
9.1 9.1 9.1
9.2 9.2 9.2

我可以使用以下方法提取集群中心:

  println(clusters.clusterCenters.apply(0))
   println(clusters.clusterCenters.apply(1))

返回

[9.1,9.1,9.1]
[0.10000000000000002,0.10000000000000002,0.10000000000000002]

但是有一些我不确定的项目似乎没有得到API的支持:

如何提取已添加到两个群集中的每个群集的点?

如何为每个数据点添加标签,以便在查看每个群集中的点时,还可以确定每个点标签?我是否需要更新Spark Kmeans实现来实现此目的?

2 个答案:

答案 0 :(得分:2)

如果您使用的是java,

javaRDD cluster_indices = clusters.predict(parsedData);

因为预测超载。

答案 1 :(得分:0)

您要查找的方法是 predict(),但不属于 KMeans.scala 。是 KMeansModel.scala 类的一部分( KMeans.train(...)的返回类型)

使用方法是:

    clusters.predict(data_to_cluster)