相比于本人上篇博客中scala实现的串行kmeans而已,这次的优点体现在并行的计算,并同时运行多组kmeans算法(选取不同的初值),选择其中效果最好的作为结果输出
作为一个初学者,这次的编程让我初步的体会到了函数式编程的魅力,让我见识到了并行计算,学习的道路还有很长啊
package zzl
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.rdd.RDD
import scala.collection.mutable.ArrayBuffer
import breeze.linalg.norm
import org.apache.spark.mllib.linalg.Vectors
//该case类保存了每个向量本身与该向量的L2范数
case class VectorInform(var Point:Vector,var norm2:Double)
//该case类保存一个向量所对应的中心向量的id与该向量与中心向量之间的花费
case class CenterInform(val center_id:Int,val cost:Double)
class Kmeans(val data:RDD[Vector],val numClusters:Int,val MaxIterations:Int,val runs:Int = 1,
val threshold:Double=1e-4,val savepath:String="/home/hadoop/haha")extends Serializable{
def output(data:Array[Array[VectorInform]])
{
data.foreach {_.foreach {x=>x.Point.foreachActive((index,value)=>print(index+" "+value+" "));println}}
}
//返回两向量的和向量
def add(p1:Vector,p2:Vector):Vector=
{

这篇博客介绍了如何使用Spark实现并行KMeans算法,对比了串行版本的优势,强调了并行计算在处理多组初始值时的高效性,展现了函数式编程在并行计算中的应用。
最低0.47元/天 解锁文章
1752





