为什么80%的码农都做不了架构师?>>>   

transformation是惰性的,只有action操作的时候,才会真正执行。spark有很多api,RDD的api只是spark的一部分,是我们用的最多的api,在命令行使用的RDD很方便,但是想要看这些api的后台,可以使用IDE,在IDE里面写spark应用,可以观察的更清楚。

官网有最新的RDD Operations,可以好好参考。

一、Rdd的创建

1 通过已经存在的Scala集合,如:val paraRdd = sc.parallelize(1 to 9, 3);后面那个3是指有三个分区

2 通过HDFS、Hbase等,如:val hdfsRdd = sc.textFile("/usr/ouput", 3);如果/usr/ouput是个文件夹,那么就会把所有的子文件当成一个Rdd。3指的是这个Rdd最少有3个分区,有可能会有更多的分区。

3 其它的RDD的转换,如map操作,就会产生新的Rdd

二、transformation相当于一个转换,会将一个RDD转换,并返回一个新的RDD

1.filter,过滤

scala> textFile.filter(line => line.contains("hello")).count() // 有多少行含有hello

Rdd里面每行元素都执行filter里的方法,只有返回true的元素才不会被过滤,返回false的元素会被过滤掉。

2.map,对Rdd中每一行元素执行一个函数,并且只会返回一行元素,对比flatMap,如下:

val inputMapRdd = inputRdd.map(line => line.split(" "));

用空格分开来的数据是一个数组,这个数组是Rdd的一个元素。

3.flatMap,对Rdd中每一行元素执行一个函数,有可能返回多行元素,如下:

val inputFlatMapRdd = inputRdd.flatMap(line => line.split(" "));

被空格分开来的每一个数据都是一行元素,这是跟map的本质区别。

4.mapPartitions,对每个partition统一执行函数,比如要对数据库操作时,可以使用此函数

下面这篇文章讲的非常详细,参考:Spark RDD API详解(一) Map和Reduce

5.union,将两个RDD进行合并,不去重。

6.intersection,两个RDD的交集,并且去重。

7.subtract,该函数类似于intersection,但返回在RDD中出现,并且不在otherRDD中出现的元素,不去重。

8.aggregate

def aggregate[U](zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)(implicit arg0: ClassTag[U]): U

先用函数seqOp对分区每个元素进行操作,然后在和zeroValue操作得到每个分区的值

再用combOp对每个分区的值进行操作,,然后在和zeroValue操作得到最后的值

参考:Spark算子:RDD行动Action操作(3)–aggregate、fold、lookup

9.fold函数同aggregate,只是把seqOp和combOp都使用同一个op函数

def fold(zeroValue: T)(op: (T, T) ⇒ T): T

参考:Spark算子系列文章

三、action相当于执行一个动作,会返回一个结果:

1.count计算行数

scala> textFile.count() // RDD中有多少行

四、缓存persist,cache

1.cache缓存在内存级别

2.persist缓存级别可调整

3.unpersist移除缓存

五、其他

1.toDebugString

A description of this RDD and its recursive dependencies for debugging.

2.partitions

查看Rdd的partition的数量,如:localRdd.partitions.size。

3.collect,当数据量大时,一定不要使用此方法。

返回Rdd的每一个元素,用数组保存,如果每个元素都是数组,那么就是数组里面包含数组。

参考:

spark中的action和transformation

Spark编程指引(三)-----------------RDD操作,shuffle和持久化

RDD:基于内存的集群计算容错抽象

Spark RDD API详解

转载于:https://my.oschina.net/cjun/blog/621593

spark Rdd 操作transformaction和action等相关推荐

  1. Spark RDD算子(transformation + action)

    概念 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的集合.RDD具有数据流模 ...

  2. spark RDD操作的底层实现原理

    RDD操作闭包外部变量原则 RDD相关操作都需要传入自定义闭包函数(closure),如果这个函数需要访问外部变量,那么需要遵循一定的规则,否则会抛出运行时异常.闭包函数传入到节点时,需要经过下面的步 ...

  3. Spark——RDD操作详解

    转载自:https://blog.csdn.net/zhaojw_420/article/details/53261965 一.基本RDD 1.针对各个元素的转化操作  最常用的转化操作是map()和 ...

  4. 2021年大数据Spark(十四):Spark Core的RDD操作

    目录 RDD的操作 函数(算子)分类 Transformation函数 ​​​​​​​Action函数 RDD的操作 有一定开发经验的读者应该都使用过多线程,利用多核 CPU 的并行能力来加快运算速率 ...

  5. Spark RDD/Core 编程 API入门系列 之rdd实战(rdd基本操作实战及transformation和action流程图)(源码)(三)...

    本博文的主要内容是: 1.rdd基本操作实战 2.transformation和action流程图 3.典型的transformation和action RDD有3种操作: 1.  Trandform ...

  6. [Spark]-RDD详解之变量操作

    RDD的操作 1.1 概述    RDD整体包含两大类操作 transformation 从现有中创建一个新的数据集 action 在对数据集做一定程度的计算后将结果返回 对于所有的transform ...

  7. Spark RDD、DataFrame原理及操作详解

    RDD是什么? RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用. RDD内部可以 ...

  8. Spark入门必读:核心概念介绍及常用RDD操作

    导读:Spark是由加州大学伯克利分校AMP实验室开源的分布式大规模数据处理通用引擎,具有高吞吐.低延时.通用易扩展.高容错等特点.Spark内部提供了丰富的开发库,集成了数据分析引擎Spark SQ ...

  9. 【大数据开发】SparkSQL——RDD、DataFrame、DataSet相互转换、DSL常用方法、SQL风格语法、Spark读写操作、获取Column对象的方式

    take,takeAsList是Action操作 limit⽅法获取指定DataFrame的前n⾏记录,得到⼀个新的DataFrame对象.和take与head不同的是,limit⽅法不是Action ...

最新文章

  1. 数学_方向导数和梯度
  2. php自动装载编程,php 类自动载入的方法
  3. 独家 | 数据科学机器学习面试题,来挑战吧~
  4. 谁来谈谈Google Earth的核心技术和架构?(转)
  5. NPOI 导入Excel和读取Excel
  6. C++编译器对属性和方法的处理机制
  7. 高盛5年来首次看好中国互联网利润
  8. 【中级软考】前驱图是什么?(貌似又名“前趋图”)
  9. CRMEB页面说明这个是v3.0H5端的
  10. 看YYModel源码的一些收获
  11. Pro*c源程序中使用宿主结构保存查询结果
  12. android 调用restful,android调用springmvc写的restful
  13. wepy小程序踩坑-未发现相关 sass/less 编译器配置,请检查wepy.config.js文件
  14. 【289天】跃迁之路——程序员高效学习方法论探索系列(实验阶段47-2017.11.21)...
  15. ubuntu15.04安装wps-office的64位版
  16. JDBC连接池DBUtils使用
  17. android模拟器模拟nfc功能吗,打开NFC模拟器不适用于Android模拟器
  18. 苹果的widget抄袭android,并非致敬!苹果解释iOS 14“桌面小工具”细节:和Android很不一样...
  19. 如何用ABBYY FineReader提取图片中的文字
  20. 六个步骤教你学会用ZBrush绘制头部模型

热门文章

  1. C++基类与派生类的转换与多态性
  2. 2016年腾讯产品笔试真题
  3. SDNU 1048.石子合并2(区间dp)
  4. man命令手册打开以后的使用方法
  5. scrapy 安装流程和启动
  6. jquery toggle()设置
  7. boost function对象
  8. Java复习(二)类与对象的基本概念
  9. centos7搭建时间服务器
  10. VS中的调试相关的技巧