Spark实现K-Means算法代码示例
发表于:2026-11-05 作者:千家信息网编辑
千家信息网最后更新 2026年11月05日,K-Means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类。MLlib实现K-Means算法的原理是,运行多个K-Means算法,每个称为run,返回最好的那个
千家信息网最后更新 2026年11月05日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
代码:
import org.apache.log4j.{Level,Logger}import org.apache.spark.{SparkContext, SparkConf}import org.apache.spark.mllib.clustering.KMeansimport org.apache.spark.mllib.linalg.Vectorsobject Kmeans { def main(args:Array[String]) = { // 屏蔽日志 Logger.getLogger("org.apache.spark").setLevel(Level.WARN) Logger.getLogger("org.apache.jetty.server").setLevel(Level.OFF) // 设置运行环境 val conf = new SparkConf().setAppName("K-Means").setMaster("spark://master:7077") .setJars(Seq("E:\\Intellij\\Projects\\SimpleGraphX\\SimpleGraphX.jar")) val sc = new SparkContext(conf) // 装载数据集 val data = sc.textFile("hdfs://master:9000/kmeans_data.txt", 1) val parsedData = data.map(s => Vectors.dense(s.split(" ").map(_.toDouble))) // 将数据集聚类,2个类,20次迭代,形成数据模型 val numClusters = 2 val numIterations = 20 val model = KMeans.train(parsedData, numClusters, numIterations) // 数据模型的中心点 println("Cluster centres:") for(c <- model.clusterCenters) { println(" " + c.toString) } // 使用误差平方之和来评估数据模型 val cost = model.computeCost(parsedData) println("Within Set Sum of Squared Errors = " + cost) // 使用模型测试单点数据 println("Vectors 7.3 1.5 10.9 is belong to cluster:" + model.predict(Vectors.dense("7.3 1.5 10.9".split(" ") .map(_.toDouble)))) println("Vectors 4.2 11.2 2.7 is belong to cluster:" + model.predict(Vectors.dense("4.2 11.2 2.7".split(" ") .map(_.toDouble)))) println("Vectors 18.0 4.5 3.8 is belong to cluster:" + model.predict(Vectors.dense("1.0 14.5 73.8".split(" ") .map(_.toDouble)))) // 返回数据集和结果 val result = data.map { line => val linevectore = Vectors.dense(line.split(" ").map(_.toDouble)) val prediction = model.predict(linevectore) line + " " + prediction }.collect.foreach(println) sc.stop }}使用textFile()方法装载数据集,获得RDD,再使用KMeans.train()方法根据RDD、K值和迭代次数得到一个KMeans模型。得到KMeans模型以后,可以判断一组数据属于哪一个类。具体方法是用Vectors.dense()方法生成一个Vector,然后用KMeans.predict()方法就可以返回属于哪一个类。
运行结果:
Cluster centres: [6.062499999999999,6.7124999999999995,11.5] [3.5,12.2,60.0]Within Set Sum of Squared Errors = 943.2074999999998Vectors 7.3 1.5 10.9 is belong to cluster:0Vectors 4.2 11.2 2.7 is belong to cluster:0Vectors 18.0 4.5 3.8 is belong to cluster:10.0 0.0 5.0 00.1 10.1 0.1 01.2 5.2 13.5 09.5 9.0 9.0 09.1 9.1 9.1 019.2 9.4 29.2 05.8 3.0 18.0 03.5 12.2 60.0 13.6 7.9 8.1 0
总结
本文关于Spark实现K-Means算法代码示例的全部内容就到这里,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:浅谈七种常见的Hadoop和Spark项目案例、Spark的广播变量和累加器使用方法代码示例、Spark入门简介等,如有不足之处,欢迎留言指出,小编会及时回复大家并更正,希望朋友们对本站多多支持!
算法
方法
数据
模型
迭代
代码
运行
示例
朋友
次数
装载
中心点
使用方法
兴趣
内容
原理
变量
多个
常见
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技互联网
华服互联网科技靠谱吗
上海睿民互联网科技有限公司
湖南永感互联网科技有限公司
科技互联网企业
互联网下的科技发展
北京互联网科技有限公司
以房互联网科技
上海致骋互联网科技
互联网科技汛
国外互联网科技网站
互联网汽车科技小镇
高科技互联网发展前景如何
浙南科技城互联网大厦招聘
本届互联网大会上的黑科技
2021世界互联网领先科技成果发布
南京一网一红互联网科技有限公司
科技互联网专业务虚会材料
互联网科技创新方面的资料
现代科技的标志之一的互联网
互联网科技战争
百单互联网科技有限公司
亿账通互联网科技
无锡溥仪互联网科技有限公司
华服互联网科技官网
中国航天科技大学国际工业互联网
互联网新科技动漫ppt素材
山东大美朱楼互联网科技有限公司
信承诺互联网科技有限公司
互联网大会出现的黑科技