spark下实现并行kmeans算法

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

相比于本人上篇博客中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=
  {
   
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值