Spark实现K-Means算法代码示例
K-Means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类。
MLlib实现K-Means算法的原理是,运行多个K-Means算法,每个称为run,返回最好的那个聚类的类簇中心。初始的类簇中心,可以是随机的,也可以是KMean||得来的,迭代达到一定的次数,或者所有run都收敛时,算法就结束。
用Spark实现K-Means算法,首先修改pom文件,引入机器学习MLlib包:
org.apache.spark spark-mllib_2.10 1.6.0
代码:
importorg.apache.log4j.{Level,Logger}
importorg.apache.spark.{SparkContext,SparkConf}
importorg.apache.spark.mllib.clustering.KMeans
importorg.apache.spark.mllib.linalg.Vectors
objectKmeans{
defmain(args:Array[String])={
//屏蔽日志
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.apache.jetty.server").setLevel(Level.OFF)
//设置运行环境
valconf=newSparkConf().setAppName("K-Means").setMaster("spark://master:7077")
.setJars(Seq("E:\\Intellij\\Projects\\SimpleGraphX\\SimpleGraphX.jar"))
valsc=newSparkContext(conf)
//装载数据集
valdata=sc.textFile("hdfs://master:9000/kmeans_data.txt",1)
valparsedData=data.map(s=>Vectors.dense(s.split("").map(_.toDouble)))
//将数据集聚类,2个类,20次迭代,形成数据模型
valnumClusters=2
valnumIterations=20
valmodel=KMeans.train(parsedData,numClusters,numIterations)
//数据模型的中心点
println("Clustercentres:")
for(c<-model.clusterCenters){
println(""+c.toString)
}
//使用误差平方之和来评估数据模型
valcost=model.computeCost(parsedData)
println("WithinSetSumofSquaredErrors="+cost)
//使用模型测试单点数据
println("Vectors7.31.510.9isbelongtocluster:"+model.predict(Vectors.dense("7.31.510.9".split("")
.map(_.toDouble))))
println("Vectors4.211.22.7isbelongtocluster:"+model.predict(Vectors.dense("4.211.22.7".split("")
.map(_.toDouble))))
println("Vectors18.04.53.8isbelongtocluster:"+model.predict(Vectors.dense("1.014.573.8".split("")
.map(_.toDouble))))
//返回数据集和结果
valresult=data.map{
line=>
vallinevectore=Vectors.dense(line.split("").map(_.toDouble))
valprediction=model.predict(linevectore)
line+""+prediction
}.collect.foreach(println)
sc.stop
}
}
使用textFile()方法装载数据集,获得RDD,再使用KMeans.train()方法根据RDD、K值和迭代次数得到一个KMeans模型。得到KMeans模型以后,可以判断一组数据属于哪一个类。具体方法是用Vectors.dense()方法生成一个Vector,然后用KMeans.predict()方法就可以返回属于哪一个类。
运行结果:
Clustercentres: [6.062499999999999,6.7124999999999995,11.5] [3.5,12.2,60.0] WithinSetSumofSquaredErrors=943.2074999999998 Vectors7.31.510.9isbelongtocluster:0 Vectors4.211.22.7isbelongtocluster:0 Vectors18.04.53.8isbelongtocluster:1 0.00.05.00 0.110.10.10 1.25.213.50 9.59.09.00 9.19.19.10 19.29.429.20 5.83.018.00 3.512.260.01 3.67.98.10
总结
本文关于Spark实现K-Means算法代码示例的全部内容就到这里,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:浅谈七种常见的Hadoop和Spark项目案例、Spark的广播变量和累加器使用方法代码示例、Spark入门简介等,如有不足之处,欢迎留言指出,小编会及时回复大家并更正,希望朋友们对本站多多支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。