理论教育 全面解析RDD操作

全面解析RDD操作

时间:2023-06-14 理论教育 版权反馈
【摘要】:val array = sc.parallelizeval value = array.mapscala> value.collectres0: Array[Int] = Array把原RDD 中每个元素都乘以2 来产生一个新的RDD,map 中的x 可以换成任何变量名,可以看到必须要通过collect 动作才能得到计算结果。val a = sc.parallelizescala> a.distinct().collect()res1: Array[Int] = Array5. union 操作union 操作是对两个RDD 操作,求它们的并集,但不会去重。val a = sc.parallelizeval b = sc.parallelizescala> a. cartesian.collect()res5: Array[] = Array二、动作操作1. collect 操作collect 操作返回RDD 中的所有元素,在前面讲解转换操作时为了显示RDD 的最后结果,都调用了collect 操作。

全面解析RDD操作

一、转换操作

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

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈