我是Apache Hadoop的初学者,到目前为止,我已经使用mapReduce执行Word Count问题以进行学习。我的目标是对一组数据执行K-means聚类,比如1.5gig +。
使用Hadoop执行K-means聚类的最简单方法是什么?我应该根据K-means的要求修改我的地图并减少功能,还是我需要Mahout(我之前没有使用过),或者没有它可以实现目标吗?
主机操作系统是Win7,我在VirtualBox上设置了HortonWorks Sandbox 2.3。任何帮助都会非常感激,因为我对选择实现目标的路径感到困惑。在期待中感谢你。
答案 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");
}
}