spark中的转换算子和行动算子区别(transformations and actions)

算子(RDD Operations):

对于初学者来说,算子的概念比较抽象,算子可以直译为 “RDD的操作”, 我们把它理解为RDD的方法即可 。

转换算子(transformations):

转换算子会从一个已经存在的数据集(RDD)中生成一个新的数据集(RDD),比如map就是一个转换算子,它通过映射关系从一个RDD生成了一个新的RDD。

行动算子(actions):

行动算子在进行数据集计算后会给driver程序返回一个值。

转换算子和行动算子最大的区别:

转换算子返回一个数据集而行动算子返回一个具体值,如reduce算子是行动算子 而 reducebykey是转换算子;
同时由于spark的惰性求值特性,所有的转换算子是不会立即计算结果的,转换算子只记录它应用的数据集,在行动算子需要给drive返回数据时转换算子才会去计算结果。(这个设计能让spark运行效率更高)

行动算子列举


System.out.println("---------ollect()以数组的形式返回数据集---------");
System.out.println( javaPairRDD.collect());


System.out.println("---------count()返回RDD中元素个数---------");
System.out.println( javaPairRDD.count());


System.out.println("---------first()返回RDD中的第一个元素---------");
System.out.println( javaPairRDD.first());


System.out.println("---------take()返回由RDD前n个元素组成的数组---------");
System.out.println( javaPairRDD.take(10));


System.out.println("---------countByKey()统计每种key的个数---------");
System.out.println( javaPairRDD.countByKey());


System.out.println("---------save相关算子---------");
 javaPairRDD.saveAsTextFile("output1/");
 javaPairRDD.saveAsObjectFile("output2/");


System.out.println("-----------foreach()遍历RDD中每一个元素--------");
javaPairRDD.foreach(new VoidFunction<Tuple2<Integer, String>>() {
         @Override
         public void call(Tuple2<Integer, String> integerStringTuple2) throws Exception {
                 System.out.println("这是key:"+integerStringTuple2._1+" 这是Value:"+integerStringTuple2._2);
         }
});


System.out.println("-----------foreachPartition ()遍历RDD中每一个分区--------");
javaPairRDD.foreachPartition(new VoidFunction<Iterator<Tuple2<Integer, String>>>() {
         @Override
         public void call(Iterator<Tuple2<Integer, String>> tuple2Iterator) throws Exception {
                 System.out.println("分区:"+tuple2Iterator.toString());
                 while (tuple2Iterator.hasNext()) {
                         System.out.println(tuple2Iterator.next());
                 }
         }
});

转换算子列举



一、Value类型
map()映射
flatMap()扁平化
groupBy()分组
filter()过滤
distinct()去重
sortBy()排序

二、key_Value类型
mapValues()只对V进行操作
groupByKey()按照K重新分组
reduceByKey()按照K聚合V
sortByKey()按照K进行排序


1)reduceByKey:按照key进行聚合,在shuffle之前有combine(预聚合)操作,返回结果是RDD[K,V]2)groupByKey:按照key进行分组,直接进行shuffle。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spark的操作分为两类:转换操作(Transformations)和行动操作(Actions)。 Transformations(转换操作)是指将一个RDD转换为另一个RDD的操作。这些操作不会立即执行,而是返回一个新的RDD,只有在遇到行动操作时才会执行。 以下是一些常见的Transformations操作: - map(func):传入一个函数,对RDD每个元素进行映射操作,返回新的RDD。 - filter(func):传入一个函数,对RDD的每个元素进行过滤操作,返回一个包含符合条件的元素的新RDD。 - flatMap(func):传入一个函数,对RDD每个元素进行映射操作,并返回多个元素,最终生成新的RDD。 - distinct([numTasks])):返回一个去重后的RDD。 - groupByKey([numTasks]):按照Key进行分组,返回一个(K, Iterable[V])的RDD。 - reduceByKey(func, [numTasks]):按照Key进行分组,然后对每个Key的Value进行reduce操作,返回一个(K, V)的RDD。 Actions(行动操作)是触发Spark计算的操作,会执行Transformations操作生成的计算图,并返回计算结果。 以下是一些常见的Actions操作: - collect():将RDD的所有元素收集到Driver端。 - count():返回RDD元素的个数。 - first():返回RDD的第一个元素。 - take(n):返回RDD前n个元素。 - reduce(func):对RDD的元素进行reduce操作。 - foreach(func):对RDD的每个元素执行给定的函数。 以上是Spark常见的Transformations和Actions,还有一些其他的操作,如join、union、distinct、sortBy等等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值