RDD_算子

目录

 

1、map(func)批处理

2、filter(func)对元素进行过滤,筛选出符合自己需求的元素

3、flatMap(func) 把元素分成最细的

flatMap 和 Map 的对比

4、groupBy 进行分组

5、sortBy  进行排序

6、union()  将两个RDD进行合并

7、distinct() 对元素进行去重

8、subtract()  减去  ---->筛选,过滤其中的元素

9、sample 随机抽样

10、intersection() 求交集,并去重,且无序返回

11、zip()  将两个RDD进行缝合  -->但要保证长度和分区相同

对键值对类型的算子进行操作

12、cogroupByKey()  将(K,V)和(K,W)返回(K,(V,W))  -->键一样的时候,对值进行合并

13、reduecByKey()

14、groupByKey()  当键相同时,将值返回到同一个集合中

15、sortByKey()  对键进行排序

16、mapValues  对键值对的值进行操作

17、join(otherDataset)  当键一样是对值进行操作

18、glom()将分区内的元素组成一个数组,分区不变

19、coalesce()对RDD进行重分区

repartition和coalesce使用场景

20、reduce(func)  通过func函数聚集RDD中所有的元素

21、collect()  以数组的形式返回数据集中的所有元素

22、count()  统计RDD中的元素

23、first() 返回RDD中的第一个元素

24、take()  返回数据集中前N个元素

25、takeSample()  从RDD中随机取数据

26、takeOrdered()  返回前几个的排序  --->  先排序在取

27、saveAsTextFile(path)  将文件进行保存

28、countByKey()  统计键的个数


 

1、map(func)批处理

val r2 = r1.map(_ * 2)  // r1里面的元素都 * 2  此外,还可以进行加减运算

val r2 = r1.map(_ + 7)

r2.collect().foreach(println)  //通过collect()方法,使其转换为数组,输出的时按顺序输出

2、filter(func)对元素进行过滤,筛选出符合自己需求的元素

val r3 = r1.filter(_ % 2 == 0)   //筛选出偶数

r3.collect().foreach(println)

val r4 = sc.makeRDD(Array("xiaoming", "xiaoli", "wanghua"))

val r5 = r4.filter(_.contains("xiao")) //表示包含xiao

val r5 = r4.filter(!_.contains("xiao"))  //表示不包含xiao

r5.collect().foreach(println)

3、flatMap(func) 把元素分成最细的

val r6 = sc.textFile("src\\main\\java\\t1.txt")

val r7 = r6.flatMap(_.split(" ")) //通过空格进行分割

flatMap 和 Map 的对比

val r8 = r6.map(_.split(" "))

        flat Map输出的为元素

        Map输出的为数据类型  例如:[Ljava.lang.String;@5adbda7

4、groupBy 进行分组

val r9 = r1.groupBy(_ % 2 == 0)

r9.collect().foreach(println)

val rdd1 = r4.groupBy(word =>word(0))  //根据首字母是否相同进行分组

rdd1.collect().foreach(println)

5、sortBy  进行排序

val r10 = sc.makeRDD(List(2,4,1,8))

r10.collect().foreach(println)  // 没有排序功能

r10.sortBy(x => x).collect().foreach(println)  //对元素自身进行排序

6、union()  将两个RDD进行合并

r1.union(r10).sortBy(x=>x).collect().foreach(println)

7、distinct() 对元素进行去重

r1.union(r10).sortBy(x=>x).distinct().collect().foreach(println)

8、subtract()  减去  ---->筛选,过滤其中的元素

val r11 = r1.subtract(r3)

r11.collect().foreach(println)

9、sample 随机抽样

val r1 = sc.makeRDD(2 to 8)

val rdd1 = sc.makeRDD(4 to 12)

val r2 = r1.sample(true, 0.3) //true 会有重复的数,false抽取的没有重复的数

r2.collect().foreach(println)

10、intersection() 求交集,并去重,且无序返回

r1.intersection(rdd1).collect().foreach(println)

11、zip()  将两个RDD进行缝合  -->但要保证长度和分区相同

val rdd2 = sc.makeRDD(1 to 5, 2) //后面的2表示的是分区

val rdd3 = sc.makeRDD(Array("A", "B", "C", "D", "E"), 2)

val rdd4 = rdd3.zip(rdd2)

对键值对类型的算子进行操作

12、cogroupByKey()  将(K,V)和(K,W)返回(K,(V,W))  -->键一样的时候,对值进行合并

val r4 = sc.makeRDD(List(2, 4, 6, 88, 10), 2)

val rdd5 = rdd3.zip(r4)

val rdd6 = sc.makeRDD(Array("a", "b", "c", "D", "E"), 2)

val rdd5 = rdd6.zip(r4)  //没有以a为键的,会显示为空  -->没有相同的键显示为空

rdd4.cogroup(rdd5).foreach(println)  // r4中没有cogroup方法是因为r4没有键值对

val rdd5 = rdd3.zip(r4)

13、reduecByKey()

val rdd7 = rdd4.union(rdd5).union(rdd4)

rdd7.foreach(println)

rdd7.reduceByKey((x,y)=>(x+y).foreach(println)  // (x,y) => x+y:  (x,y)表示键相同时的不同的值,x+y 表示对值进行的操作

println(r4.reduce(_ + _))  //reduce 会直接输出结果,不用进行foreach操作

14、groupByKey()  当键相同时,将值返回到同一个集合中

         区别:groupByKey() 和 cogroupByKey() 区别 :前者是对一个RDD进行操作,后者是对两个RDD进行操作

rdd7.groupByKey().collect().foreach(println)

val r7= sc.makeRDD(List(("a", 50), ("b", 0), ("c", 30), ("c", 90), ("b", 20), ("a", 80)))

r7.groupByKey().map(_._2).foreach(println)  //_._2每个元素的第二位

r7.groupByKey().map(_._2.toList.sorted).foreach(println)  //对其进行排序

r7.groupByKey().map(x=> (x._1,x._2.toList.sorted)).foreach(println)

15、sortByKey()  对键进行排序

val rx = sc.makeRDD(List(4, 12, 52, 123, 44, 32, 533),4)

val ry = sc.makeRDD(1 to 7)

rx.zip(ry).sortByKey().collect().foreach(println)

rx.sortBy(x => x).collect().foreach(println)

16、mapValues  对键值对的值进行操作

17、join(otherDataset)  当键一样是对值进行操作

    与cogroup的区别是数据类型不一样

18、glom()将分区内的元素组成一个数组,分区不变

19、coalesce()对RDD进行重分区

println(rx.partitions.size)

  //对rx进行重分区

val rx1 = rx.coalesce(2)

val rx1 = rx.repartition(2)

println(rx1.partitions.size)

repartition和coalesce使用场景

增加分区:repartition

减少分区:coalesce

20、reduce(func)  通过func函数聚集RDD中所有的元素

val r1 = sc.makeRDD(1 to 10)

println(r1.reduce(_+_))

val r2 = sc.makeRDD(Array(("a",1),("a",2),("c",3),("d",5)))

println(r2.reduce((x,y)=>(x._1+y._1,x._2+y._2)))

21、collect()  以数组的形式返回数据集中的所有元素

22、count()  统计RDD中的元素

println(r1.count())

23、first() 返回RDD中的第一个元素

println(r2.first())

24、take()  返回数据集中前N个元素

r1.take(3).foreach(println)

25、takeSample()  从RDD中随机取数据

r1.takeSample(2,3)  -->  错在哪里

26、takeOrdered()  返回前几个的排序  --->  先排序在取

val r3 = sc.makeRDD(List(1,55,48,46,52,45))

r3.takeOrdered(5).foreach(println)

27、saveAsTextFile(path)  将文件进行保存

28、countByKey()  统计键的个数

0f13cf5fb7fe4dde93a477b39b235b29.png

Spark转换算子PPT

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值