Spark 基础——RDD 算子

  • RDD弹性分布式数据集(Resilient Distributed Dataset)是 Spark 最基本也是最根本数据抽象

  • RDD 它具备像 MapReduce 等数据流模型容错性(fault-tolerant),

    为了实现容错,RDD 提供了一种高度受限的共享内存,即 RDD 是只读的,并且只能通过其他 RDD 上的批量操作来创建。

  • 它允许开发者在大型集群上执行基于内存的计算

1. 常用算子

算子指的是 RDD 下的成员函数;

  • transformation 型算子

    • reduceByKey
    • flatMap
    val chars = sc.parallelize(Array("a b c", "d e f", "h i j"))
    chars.flatMap(_.split('')).collect
    	// Array[String] = Array(a, b, c, d, e, f, h, i, j)
    
    • join
    val rdd1 = sc.parallelize(List(("tom", 1), ("jerry", 3), ("kitty", 2)))
    val rdd2 = sc.parallelize(List(("jerry", 2), ("tom", 1), ("shuke", 2)))
    (rdd1 join rdd2).collect
    	// Array((tom,(1,1)), (jerry,(3,2)))
    
    • reduceByKey vs. groupByKey
    val unionRdd = rdd1 union rdd2
    // groupByKey 的返回值
    unionRdd.groupByKey().collect
     	// Array((shuke,CompactBuffer(2)), (tom,CompactBuffer(1, 1)), 
     			(kitty,CompactBuffer(2)), (jerry,CompactBuffer(3, 2)))
    unionRdd.groupByKey().mapValues(_.sum).collect
    	// Array[(String, Int)] = Array((shuke,2), (tom,2), (kitty,2), (jerry,5))
    unionRdd.reduceByKey(_+_).collect
    	// Array[(String, Int)] = Array((shuke,2), (tom,2), (kitty,2), (jerry,5))
    
    • cogroup 与 groupByKey
    val rdd6 = sc.parallelize(List(("jerry", 2), ("tom", 1), ("shuke", 2)))
    val rdd7 = sc.parallelize(List(("jerry", 2), ("tom", 1), ("tom", 3), ("shuke", 2)))
    rdd7.cogroup(rdd6).collect
    	// Array((tom,(CompactBuffer(1, 3),CompactBuffer(1))), 
    		(jerry,(CompactBuffer(2),CompactBuffer(2))), 
    		(shuke,(CompactBuffer(2),CompactBuffer(2))))
    
  • action 型算子

    • reduce

2. 辨异

  • transformation 型的 map 算子与 action 型的 foreach 算子:
    • 都是遍历;
    • map 算子有返回值(new MapPartitionsRDD),foreach 算子无返回值;
    • foreach 比如应用于:
      • println:rdd.foreach(println)
      • 数据库交互;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值