如何使用Apache Hadoop执行K-means?

时间:2015-10-22 13:03:31

标签: hadoop mahout k-means

我是Apache Hadoop的初学者,到目前为止,我已经使用mapReduce执行Word Count问题以进行学习。我的目标是对一组数据执行K-means聚类,比如1.5gig +。

使用Hadoop执行K-means聚类的最简单方法是什么?我应该根据K-means的要求修改我的地图并减少功能,还是我需要Mahout(我之前没有使用过),或者没有它可以实现目标吗?

主机操作系统是Win7,我在VirtualBox上设置了HortonWorks Sandbox 2.3。任何帮助都会非常感激,因为我对选择实现目标的路径感到困惑。在期待中感谢你。

1 个答案:

答案 0 :(得分:0)

我认为简单的k方法是 K-MEANS 。 Spark使用hadoop hdfs运行。

  

Apache Spark

以下是您可以从spark site

找到的示例详细信息
public class KMeansExample {
  public static void main(String[] args) {
    SparkConf conf = new SparkConf().setAppName("K-means Example");
    JavaSparkContext sc = new JavaSparkContext(conf);

    // Load and parse data
    String path = "data/mllib/kmeans_data.txt";
    JavaRDD<String> data = sc.textFile(path);
    JavaRDD<Vector> parsedData = data.map(
      new Function<String, Vector>() {
        public Vector call(String s) {
          String[] sarray = s.split(" ");
          double[] values = new double[sarray.length];
          for (int i = 0; i < sarray.length; i++)
            values[i] = Double.parseDouble(sarray[i]);
          return Vectors.dense(values);
        }
      }
    );
    parsedData.cache();

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

    // Evaluate clustering by computing Within Set Sum of Squared Errors
    double WSSSE = clusters.computeCost(parsedData.rdd());
    System.out.println("Within Set Sum of Squared Errors = " + WSSSE);

    // Save and load model
    clusters.save(sc.sc(), "myModelPath");
    KMeansModel sameModel = KMeansModel.load(sc.sc(), "myModelPath");
  }
}