我正在使用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。
答案 0 :(得分:3)
只需map
和predict
:
parsedData.map(p => (model.predict(p), p))
要获取原始文档,只要数据没有重新排序(洗牌),您就可以尝试zip
方法:
model.predict(parsedData).zip(rawDocuments)