spark之RDD

综述

概念与特性

RDD是spark最重要的抽象。spark统一建立在抽象的RDD之上。设计一个通用的编程抽象,使得spark可以应对各种场合的大数据情景。RDD模型将不同的组件融合到一起,选用其中的几个/所有,可以应付各种不同的场景。解决了mr的缺陷
1. 弹性分布式数据集Resilient Distributed Dataset。
2. 只读分区数据集,final修饰的
3. 一个分布式的数据集合,是spark中的核心,spark的操作都是围绕RDD展开的。
4. 真正的运算是在各个计算节点。
5. 当某个RDD操作丢失的时候,可以很快恢复。

分区

  • 不同分区可能被划分到不同机器上。但是每个分区对应一个数据block
  • 分区是个逻辑概念,新旧分区可能是同一块内存。(重要的优化,节约资源。)。在函数式编程,经常使用常量,但是很费内存,rdd的这种优化非常实用。防止内存的无限性扩充。
  • 只是记录需要做的操作。只有当真正要执行的时候,才具体的执行。

计算

  • 并行计算。计算/处理都是在各分区上,并行计算。并行,提高了效率。
  • 真正的数据处理都是在各个分散的节点上。

依赖

  • 子RDD从父RDD产生,父子RDD之间的关系。
    • 宽依赖:依赖上级所有的RDD分区。宽依赖一般非常消耗资源,结果一般要缓存下来
    • 窄依赖:依赖上级RDD的部分分区。计算的时候可能都在同一个节点上,节省资源
  • stage以依赖的区别,分成不同的stage
  • 每个父RDD的分区,只能被最多一个字RDD使用,子RDD可以使用任意个父RDD。

RDD的操作

创建

  • 从外部数据集中读取。来源于文件系统(HDFS,HBASE),textFile方法
    这里的路径要让每个RDD的节点都能访问到
// 从外部文本中创建RDD。可以指定分片的个数
lines =  sc.textFle("路径",3)
// 一个目录下所有的文件。
lines = sc.wholeTextFile("路径")
// 从hadoop系统创建RDD
val rdd = newApiHadoopFile()
// 从hadoop数据创建RDD
val RDD = new ApiHadoopRDD()
  • 从驱动程序中对一个集合进行并行化
    在测试的时候用的多,parallelize方法。可以指定分区个数
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值