-
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)
- 数据库交互;