RDD操作

概述:针对RDD的操作分为两种,一种是Transform变换操作,一种是Action执行操作。
Transform操作是懒操作(简称:算子),懒操作不会真正的触发RDD的处理计算;
Action操作会触发计算。
一、Transform操作
1.map(fun): 参数是函数,函数会作用于RDD的每一个元素,并会返回一个RDD

val rdd = sc.makeRDD(List(1,3,5,7,9))
rdd.map(_*10)

结果是 10,30,50,70,90
2.flatmap(fun) : 扁平化map,对RDD每个元素转换, 然后再扁平化处理

val rdd = sc.makeRDD(List("hello world","hello count","world spark"),2)
rdd.map(_.split{" "})//Array(Array(hello, world), Array(hello, count), Array(world, spark))
rdd.flatMap(_.split{" "})//Array[String] = Array(hello, world, hello, count, world, spark)
//Array[String] = Array(hello, world, hello, count, world, spark)

3.filter(fun) : 过滤器操作

val rdd = sc.makeRDD(List(1,3,5,7,9));
rdd.filter(_<5);// 结果:1,3

4.mapPartitions(fun) : 该函数和map函数类似,只不过映射函数的参数由RDD中的每一个元素变成了RDD中每一个分区的迭代器。

var rdd1 = sc.makeRDD(1 to 5,2)
val rdd3 = rdd1.mapPartitions{ x => {
val result = List[Int]()
var i = 0
while(x.hasNext){
i += x.next() //累加
}
result.::(i).iterator
}} // 结果: 3 , 12

5.union(otherDataset) : 并集

val rdd1 = sc.makeRDD(List(1,3,5));
val rdd2 = sc.makeRDD(List(2,4,6,8));
val rdd = rdd1.union(rdd2);
val rdd = rdd1 ++ rdd2;

6.intersection(otherDataset) : 交集

val rdd1 = sc.makeRDD(List(1,3,5,7));
val rdd2 = sc.makeRDD(List(5,7,9,11));
val rdd = rdd1.intersection(rdd2);

7.subtract:差集

val rdd1 = sc.makeRDD(List(1,3,5,7,9));
val rdd2 = sc.makeRDD(List(5,7,9,11,13));
val rdd =  rdd1.subtract(rdd2);

8.distinct([numTasks])):去重

val rdd = sc.makeRDD(List(1,3,5,7,9,3,7,10,23,7));
rdd.distinct

9.groupByKey([numTasks]):分组

val rdd = sc.parallelize(List(("cat",2), ("dog",5),("cat",4),("dog",3),("cat",6),("dog",3),("cat",9),("dog",1)),2);
rdd.groupByKey()

10.reduceByKey(func, [numTasks]):reduce操作,根据相同key值对value操作

var rdd = sc.makeRDD( List( ("hello",1),("spark",1),("hello",1),("world",1) ) )
rdd.reduceByKey(_+_);

11.sortByKey([ascending], [numTasks]):排序

val d2 = sc.parallelize(Array(("cc",32),("bb",32),("cc",22),("aa",18),("bb",6),("dd",16),("ee",104),("cc",1),("ff",13),("gg",68),("bb",44)))

在这里插入图片描述
二、Action操作
1.reduce(func) : 并行整合所有RDD数据,例如求和操作;
2.collect():返回RDD所有元素,将rdd分布式存储在集群中不同分区的数据 获取到一起组成一个数组返回。注意:这个方法将会把所有数据收集到一个机器内,容易造成内存的溢出 在生产环境下千万慎用;
3.count():统计RDD里元素个数;
4.first():返回RDD的第一个元素;
5.take(n):返回RDD的前n个元素;
6.takeOrdered(n, [ordering]) : 先将RDD中的元素升序排序,在取前n个;
7.Top(n):先降序排,再取前n个;
8.saveAsTextFile(path):saveAsTextFile 按照文本方式保存分区数据

val rdd = sc.makeRDD(List(1,2,3,4,5),2);
rdd.saveAsTextFile("/root/work/aaa")

可能不太全,请大家见谅!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值