Spark MLlib学习

《SPARK MLLIB机器学习》_黄美灵

spark主要库

  1. SparkSQL:SQL或Hive查询数据。
  2. Spark Streaming:流数据实时处理,如web日志。
  3. MLlib:机器学习库。
  4. GraphX:图计算库。
  • 目前主要学习使用MLlib和SparkSQL。

一、MLlib算法库

在这里插入图片描述

1.RDD

  • 弹性分布式数据集(Resilient Distributed Dataset)。可以将数据存储在磁盘或内存中,并能空值数据分期。
  • 提供map、filter、flatMap等转换操作和count、reduceByKey等统计操作。
1.1创建操作
  1. 数据集合转换,sc.parallelize方法。接受数据集合与分区两个参数。
  2. 外部数据读取。sc.textFile方法。接受数据路径和分区两个参数。
1.2转换操作
  1. map:一对一映射。

val rdd1 = sc.parallelize(1 to 9,3)
val rdd2 = rdd1.map(x => x*2)
rdd2.collect

  1. filter:过滤。

var rdd3 = rdd1.filter(x =>x>10)
rdd3.collect

  1. flatMap:一对多映射。

var rdd4 = rdd1.flatMap(x=>x to 20)

  1. mapPartitions:map变种。
  2. mapPartitionsWithIndex:与mapPartitions类似,多传入split index
  3. sample:随机抽样。
  4. union:数据合并
  5. intersection:数据交集
  6. distinct:去重
  7. groupByKey:数据分组

var rdd1 = sc.parallelize(Array((1,1),(1,2),(2,2),(2,3),(3,3),(3,4)))
rdd1.groupByKey().collect

  1. reduceByKey:数据分组聚合。对相同key的值进行函数聚合。

rdd1.reduceByKey((x,y)=>x+y).collect

  1. aggregate:与reduceByKey输入输出都是(k,v),aggregate输出输入可以不同。

rdd0.aggregate(0)(math.max(,),+)

  1. combineByKey:自定义函数对数据集按key聚合。
def combineByKey[C](
      createCombiner: V => C, //当前的值作为参数,可以对其做些附加操作(类型转换)并把它返回(这一步类似于初始化操作)
      mergeValue: (C, V) => C,//该函数把元素V合并到之前的元素C(createCombiner)上(这个操作在每个分区内进行)
      mergeCombiners: (C, C) => C,//该函数把2个元素C合并(这个操作在不同分区间进行)
      partitioner: Partitioner,
      mapSideCombine: Boolean = true,
      serializer: Serializer = null)
// 示例
val initialScores = Array(("Fred", 88.0), ("Fred", 95.0), ("Fred", 91.0), ("Wilma", 93.0), ("Wilma", 95.0), ("Wilma", 98.0))
val d1 = sc.parallelize(initialScores,3)
type MVType = (Int, Double) //定义一个元组类型(科目计数器,分数)
var d2 = d1.combineByKey(
  score => (1, score),//把分数作为参数,并返回了附加的元组类型。以"Fred"为列,当前其分数为88.0 =>(1,88.0),1表示当前科目的计数器,此时只有一个科目
  (c1: MVType, newScore) => (c1._1 + 1, c1._2 + newScore),//这里的c1就是createCombiner初始化得到的(1,88.0)。在一个分区内,我们又碰到了"Fred"的一个新的分数91.0。
  //当然我们要把之前的科目分数和当前的分数加起来即c1._2 + newScore,然后把科目计算器加1即c1._1 + 1
  (c1: MVType, c2: MVType) => (c1._1 + c2._1, c1._2 + c2._2) //"Fred"的分数可能分散在不同的分区中。所有的分区都进行mergeValue后,接下来就是对分区间进行合并了,分区间科目数和科目数相加分数和分数相加就得到了总分和总科目数
)
//d2结果:Array[(String, (Int, Double))] = Array((Wilma,(3,286.0)), (Fred
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值