Spark实现K-Means算法代码示例
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,K-Means算法是一种基于距离的聚类算法,采用迭代的方法,计算出K个聚类中心,把若干个点聚成K类。MLlib实现K-Means算法的原理是,运行多个K-Means算法,每个称为run,返回最好的那个
千家信息网最后更新 2026年11月04日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安全错误
数据库的锁怎样保障安全
湖北九亚互联网络科技有限公司
互联网与科技金融数据
麻工互联网科技
宜安科技 互联网金融
天津摩尔互联网科技
互联网科技博客
成都狮子座互联网科技
青岛中康互联网医疗科技有限公司
中盈科技互联网信息有限公司
央行互联网金融科技公司
字节跳动和互联网科技
黑科技闪耀互联网之光
高科技互联网发展前景如何
阿里互联网科技企业
华中科技大学互联网的牛人
科技互联网的核心竞争力
互联网企业科技类企业如何做账
浙南科技城互联网大厦招聘
福州德业互联网科技
中国科技和美国互联网
上海喔噻互联网科技有限公司
互联网科技工作委员会副主任毛军
互联网与科技金融数据
宝灵互联网科技有限公司
深圳育鹏互联网科技有限公司招聘
互联网科技和法律行业
群盈汇互联网科技有限公司
无锡工业互联网科技有限公司
萌小萌互联网科技河南有限公司
全球科技与互联网公司市值变化