spark算子总结

spark算子总结

  • RDD介绍

rdd是(resilient distribute dataset)弹性分布式数据集
代表一个不可变,可分区,里面的元素可并行计算的集合
对rdd的改动,只能通过转换算子,转换成一个新的形态的rdd,所以调用转换算子返回一个新的rdd

  • Spark 算子的分类

spark的算子分为行动算子和转换算子
调用转换算子是逻辑上的传递,并没有真正运算,实际数据并没有变化,调用行动算子后,才会发给执行器,才会实际在在执行器中执行运算。

  • Spark RDD的创建

编译环境:IDEA

  • 先获得一个sc对象
val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("Demo1")
val sc = new SparkContext(sparkConf)
  • rdd对象的创建 有两种方式makeRDD和parallize
val rdd: RDD[Int] = sc.makeRDD(1 to 10, 3)
val rdd: RDD[Int] = sc.parallelize(1 to 10, 3)
  • 转换算子

1.map算子
从A类型到B类型的映射,一般用来RDD格式转换,rdd中的元素整体上分为value类型和key-value类型

val rdd: RDD[String] = sc.makeRDD(Array("张三","李四","王五","张三","李四","张三"))
val mapRDD: RDD[(String, Int)] = rdd.map((_, 1))
mapRDD.foreach(println)

result
(李四,1)
(张三,1)
(张三,1)
(李四,1)
(王五,1)
(张三,1)

2.mapPartitions是按分区数对每个分区的进行处理的,如果有M个分区,那么每次处理一个分区,处理M次,map是按数据条数处理的,有n条数据,每次就处理N条数据,map处理n次,内存足够大时,mapPartitions比map效率高

	val rdd: RDD[String] = sc.makeRDD(Array("张三","李四","王五","张三","李四","张三"),3)
    val mapPRdd: RDD[(String, Int)] = rdd.mapPartitions(iter => iter.map((_, 1)))
    mapPRdd.foreach(println)

result
(王五,1)
(李四,1)
(张三,1)
(张三,1)
(张三,1)
(李四,1)

3,mapPartitionsWithIndex

val rdd: RDD[String] = sc.makeRDD(Array("张三","李四","王五","张三","李四","张三"),3)
val mapPI: RDD[(Int, (String, Int))] = rdd.mapPartitionsWithIndex((i, iter) => {
   
      iter.map((_, 1)).map((i, _))
    })

result
(2,(李四,1))
(0,(张三,1))
(1,(王五,1))
(0,(李四,1))
(2,(张三,1))
(1,(张三,1))

4.glom算子
将每一个分区的数据,装载到一个array中

val rdd: RDD[String] = sc.makeRDD(Array("张三","李四","王五","张三","李四","张三"),3)
val glomRdd: RDD[Array[String]] = rdd.glom
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值