Spark-算子

        Spark的Transform算子和Action算子列举和示例


一:Spark的算子的分类        

  1. 从大方向来说,Spark 算子大致可以分为以下两类:
    1)TransFormation:变换/转换算子(懒加载):不触发提交作业,完成作业中间过程处理。
        TransFormation操作是延迟计算的,也就是说从一个RDD转换生成另一个RDD的转换操作
        不是马上执行,需要等到有 Action 操作时才会真正触发运算。


    2)Action行动算子:这类算子会触发 SparkContext 提交job作业。
        Action算子会触发Spark提交作业(Job),并将数据输出Spark系统。
    从小方向来说,Spark算子大致分以下三类:
    1)Value数据类型的Transformation算子,这种变换并不触发提交作业,针对处理的数据项是Value型的数据。
    2)Key-Value数据类型的Transformation算子,这种变换并不触发提交作业,针对处理的数据项是Key-Value型的数据对。
    3)Action算子,这类算子会触发SparkContext提交Job作业。
    
1)Value 数据类型的Transformation算子
    一丶输入分区与输出分区一对一
        1、map算子
        2、flatMap算子
        3、mapParitions算子
        4、glom算子
    二、输入分区与输出分区多对一
        5、union算子
        6、cartesian算子
    三、输入分区与输出分区多对多
        7、groupBy算子
    四、输出分区为输入分区子集
        8、filter算子
        9、distinct算子
        10、subtract算子
        11、sample算子
        12、takeSample算子
    五、Cache
        13、cache算子
        14、persist算子
2)key-Value数据类型的Transformation算子
    一、输入分区与输出分区一对一
        15、mapValues算子
    二、对单个RDD或两个RDD聚集
        单个RDD聚集:
        16、combinerByKey算子
        17、reduceByKey算子
        18、partitionBy算子
        两个RDD聚集
        19、Cogroup算子
    三、连接
        20、join算子
        21、leftOutJoin和rightOutJoin算子
3)Action算子
    一:无输出
        22、foreach算子
    二:HDFS
        23、saveAsTextFile算子
        24、saveAsObject算子
    三:Scala集合和数据类型
        25、collect算子
        26、collectAsMap算子
        27、reduceByKeyLocally算子
        28、lookup算子
        29、count算子
        30、top算子
        31、reduce算子
        32、fold算子
        33、aggregate算子
        
1.Transformations 算子
--map
    将原来RDD的每个数据项通过map中的用户自定义函数f映射转变为一个新的函数.    
 def map(sc: SparkContext) = {
    val rdd: RDD[Int] = sc.parallelize(Array(1, 2, 3, 4, 5), (3))

    println(rdd.map(x => x * 100).collect().toBuffer)
    //Res:ArrayBuffer(100, 200, 300, 400, 500)
  }


--flatMap
将原来RDD中的每个元素通过函数转换为新的元素,并将生成的RDD的每个集合中的元素合并为一个集合。
 
 def flatMap(sc: SparkContext) = {
    val rdd: RDD[String] = sc.parallelize(Array("ab","cd","ef"))
    println( rdd.flatMap(x => x+"@").collect().toBuffer)
    rdd.flatMap(x=>x+"#").foreach(print(_))

    //res:ArrayBuffer(a, b, @, c, d, @, e, f, @)
    //res:ab#cd#ef#
  }

--mapPartitions
    mapPartitions函数获取到每个分区的迭代器,在函数中通过这个分区整体的迭代器对整个分区的元素进行操作。
    效果和map一样,只是操作对象是一个迭代器。对分区的操作。map是对每个元素的操作。
def mapPartitions(sc: SparkContext) = {
    val rdd: RDD[Int] = sc.parallelize(Array(1, 2, 3, 4, 5, 6), (3))
    //rdd.mapPartitions(i

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值