Spark集群下的K-Means算法
引言
1.1背景
由于刚刚开始学习Spark平台,希望通过学习基础的Spark机器学习算法的使用来对Spark平台以及Scala语言进行一个简单的了解和使用。在这里我首先以最常见的机器学习的K-Means聚类算法。后期希望能够在Spark上实现AHP算法。
1.2编写目的
在学习过程中,发现了有许多介绍K-Means算法原理博客和文章,也有许多关于K-Means的代码(其中包括有C、C++、Java、Scal
a等等),但是从项目的构建,数据的选取到最后的聚类结果,很少有对整个运行过程有一个系统的介绍。在这里我避开K-Means
原理的介绍,重点阐述一下整个Spark环境上如何运行Scala的K-Means算法。
1.3参考资料
在这篇博客的编写过程中,主要参考了《kmeans算法详解与spark实战》,《Spark下的K-Means算法》,感谢他们。
在项目的运行中,采用的也是博客中推荐的数据集《Wholesale customers Data Set 》
K-Means实现简介
2.1完整代码
我们采用上述注明的参考博客中的代码进行运行,具体的代码如下所示:
package KMeansTest
import org.apache.spark.mllib.clustering.{KMeans, KMeansModel}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.{SparkConf, SparkContext}
object Kmeans {
def main(args: Array[String]): Unit = {
val conf =new SparkConf()
val sc = new SparkContext(conf)
val rawTrainingData = sc.textFile("file:///usr/local/spark/data_train")
val parsedTrainingData =rawTrainingData.map{
line=>
Vectors.dense(line.split(',').map(_.toDouble))
}.cache()
val numClusters = 8
val numIterations = 30
val runTimes = 3
var clusterIndex: Int = 0
val clusters:KMeansModel= KMeans.train(parsedTrainingData,nu