如何使用Spark Kmeans模型获取Kmeans集群数据

时间:2016-07-06 22:36:20

标签: apache-spark machine-learning

我正在使用Spark ML对600万条记录进行Kmeans聚类,我使用以下代码来获取Kmeans模块:

val model = KMeans.train(parsedData, 3, 8)

我将群集中心号设置为3.使用以下代码,我可以通过以下代码获得3个群集中心:

model.clusterCenters.foreach{println} 

我的问题是如何获得真实的群组数据,我想Spark应该输出6个实际数据,包含3组。

进一步的问题:上面的任务是聚类文本文档。所以我将文本文档转移到浮动向量。 Spark只放出浮动矢量,但我想直接得到原始文本文档,有什么想法吗? 例如: 我的文件如下:

doc1: {the book is good}
doc2: {the weather is sunny}
doc3: {rain is coming}

我将上面的文本文件转移到浮动向量,如下所示,用于提供Spark ML:

doc1:{0.2,0.3,0.5,1.5,0.0,0.0,0.0,0.0}
doc1:{0.2,0.0,0.5,0.0,0.8,0.0,0.0,0.0}
doc1:{0.0,0.3,0.0,0.0,0.8,0.0,0.0,0.9}

所以我希望Spark可以直接输出集群的原始文本docs而不是float vector。

1 个答案:

答案 0 :(得分:3)

只需mappredict

parsedData.map(p => (model.predict(p), p))

要获取原始文档,只要数据没有重新排序(洗牌),您就可以尝试zip方法:

model.predict(parsedData).zip(rawDocuments)