一、转换操作
1. map 操作
map 操作是对RDD 中的每个元素都执行一个指定的函数来产生一个新的RDD,任何原RDD 中的元素在新RDD 中都有且只有一个元素与之对应。
val array = sc.parallelize(1 to 10, 2)
val value = array.map(x => x*2)
scala> value.collect
res0: Array[Int] = Array(2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
把原RDD 中每个元素都乘以2 来产生一个新的RDD,map 中的x 可以换成任何变量名,可以看到必须要通过collect 动作才能得到计算结果。
2. flatMap 操作
flatMap 操作与map 类似,区别是原RDD 中的元素经map 处理后只能生成一个元素,而原RDD 中的元素经flatmap 处理后可生成多个元素来构建新RDD。
val array = sc.parallelize(1 to t, 2)
val value1 = array. flatMap (x => (1 to x))
scala> value1.collect
res1: Array[Int] = Array(1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5)
3. filter 操作
filter 操作对RDD 中的每个元素进行过滤,返回符合条件的元素组成的一个新RDD。
val array = sc.parallelize(1 to 10, 2)
scala> val new1 = array.filter(_ % 2 == 0).collect
new1: Array[Int] = Array(2, 4, 6, 8, 10)
4. distinct 操作
distinct 操作会去除RDD 中的重复元素。
val a = sc.parallelize(Array(1,1,2,3,4,5,3))
scala> a.distinct().collect()
res1: Array[Int] = Array(4, 1, 3, 5, 2)
5. union 操作
union 操作是对两个RDD 操作,求它们的并集,但不会去重。
val a = sc.parallelize(Array(1,2,3,4,5))
val b = sc.parallelize(Array(3,4,5,6,7))
scala> a.union(b).collect()
res2: Array[Int] = Array(1, 2, 3, 4, 5, 3, 4, 5, 6, 7)
6. intersection 操作
intersection 操作求两个RDD 的交集。
val a = sc.parallelize(Array(1,2,3,4,5))
val b = sc.parallelize(Array(3,4,5,6,7))
scala> a. intersection(b).collect()
res3: Array[Int] = Array(4, 3, 5)
7. subtract 操作
subtract 操作求两个RDD 的差集。
val a = sc.parallelize(Array(1,2,3,4,5))
val b = sc.parallelize(Array(3,4,5,6,7))
scala> a. subtract(b).collect()(www.daowen.com)
res4: Array[Int] = Array(1, 2)
8. cartesian 操作
cartesian 操作求两个RDD 的笛卡尔积。
val a = sc.parallelize(Array(1,2,3,4,5))
val b = sc.parallelize(Array(3,4,5,6,7))
scala> a. cartesian(b).collect()
res5: Array[(Int, Int)] = Array((1,3), (1,4), (1,5), (1,6), (1,7), (2,3), (2,4), (2,5), (2,6),(2,7), (3,3), (3,4), (3,5), (3,6), (3,7), (4,3), (4,4), (4,5), (4,6), (4,7), (5,3), (5,4), (5,5), (5,6),(5,7))
二、动作操作
1. collect 操作
collect 操作返回RDD 中的所有元素,在前面讲解转换操作时为了显示RDD 的最后结果,都调用了collect 操作。
2. count 操作
count 操作返回RDD 的元素个数。
val a = sc.parallelize(Array(1,2,3,4,5))
scala> a.count
res6: Long = 5
3. countByValue 操作
countByValue 操作统计RDD 中元素出现的次数。
val a = sc.parallelize(Array(1,1,1,3,4,5,3))
scala> a.countByValue
res7: scala.collection.Map[Int,Long] = Map(4 -> 1, 1 -> 3, 3 -> 2, 5 -> 1)
4. take(n)操作
take(n)操作返回RDD 中的n 个元素。
val a = sc.parallelize(Array(1,2,3,4,5))
scala> a.take(3)
res2: Array[Int] = Array(1, 2, 3)
5. top(n)操作
top(n)操作返回RDD 中的前n 个元素。
val a = sc.parallelize(Array(1,2,3,4,5))
scala> a.top(3)
res3: Array[Int] = Array(5, 4, 3)
6. foreach()操作
foreach()操作依次遍历RDD 中的所有元素。
val a = sc.parallelize(Array(1,2,3,4,5))
a scala> a.foreach(i => print(i + "\t"))
1 2 3 4 5
7. reduce 操作
reduce 操作将RDD 中元素两两传递给输入函数,同时产生一个新的值,新产生的值(作为函数的第一个参数)与RDD 中下一个元素(作为函数的第二个参数)再被传递给输入函数直到最后只有一个值为止。
val a = sc.parallelize(1 to 10)
scala> a.reduce((x, y) => x + y)
res0: Int = 55
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。