当我在Mahoot中运行kmeans聚类时,我得到两个文件夹:clusters-x和clusteredPoints。
我已经使用群集转储程序读取了群集中心,但我不知道怎样才能访问clusteredPoints?具体来说,我需要从代码中完成。
奇怪的是我在clusteredPoints中的文件大小总是128个字节,当我尝试循环结果时,使用下一个代码,它只是走出循环,就像没有结果,但我得到了集群中心,这导致假设点聚集。
IntWritable key = new IntWritable();
WeightedPropertyVectorWritable value = new WeightedPropertyVectorWritable();
while (reader.next(key, value)) {
System.out.println(
value.toString() + " belongs to cluster " + key.toString());
}
它刚刚走出循环?
真的很奇怪,任何帮助都会很棒,谢谢。
答案 0 :(得分:1)
您需要打开最终的群集文件(' clusteredPoints / part-m-0'):
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
SequenceFile.Reader reader = new SequenceFile.Reader(fs, new Path("output/clusteredPoints/part-m-0"), conf);
然后,假设您的密钥是int,则迭代它(就像您已经做过的那样),并使用:
IntWritable key = new IntWritable();
WeightedPropertyVectorWritable value = new WeightedPropertyVectorWritable();
while (reader.next(key, value)) {
LOG.info("{} belongs to cluster {}", value.toString(), key.toString());
}
reader.close();
如果您仍然无法执行此操作,我可以发布一个完整的示例。