Spark RDD 剖析

RDD五大特性

外部存储转换为RDD
val datas=sc.textfile("address")
val wordrdd=rdd.flatmap(_.split(""))
val kvRdd=wordrdd.map((_,1))
val wordcoutrdd=kvrdd.reducebykey(_+_)
 wordcoutrdd.collect
...transform中lazy加载,不会执行,直到action操作后才执行

1 a list of partitions(一系列分区组成的)
2 每一个分区都有一个function进行转换
3 每个rdd都有对其他RDD的依赖
4 optionally,针对keyvalue形式的rdd可以指定分区,告诉它如何分片
5 optionally,处理RDD的每个分片,split数据在哪里,就去哪计算,移动计算

操作

  • transformation
    • 创建一个新的数据集
    • lazy mode
    • example: map flatmap filter groupbykey reducebykey sortbykey join union
  • action
    • 返回一个值给driverprogram:例如保存 saveastextfile("address")
    • 缓存为后续执行节省时间 persistent() cache()

RDD依赖

  • 窄依赖
    • 子RDD的每个分区依赖于常数个父分区
    • 输入输出一对一的算子,且结果RDD的分区结构不变
    • 输入输出一对一,但结果的RDD分区结构发生了变化
    • 从输入中选择部分元素的算子
  • 宽依赖
    • 子RDD的分区依赖于所有的父RDD纷分区
    • 对单个RDD基于key进行重组和reduce
    • 对两个RDD基于key进行join和重组

RDDshuffle

  • 针对split重新调整分区的机制
  • 发生调整分区的会有此过程
  • jion操作、bykey操作

spark内核分析

  • RDD object
  • DAG scheduler
    • spark 阶段划分:根据有没有shuffle
  • task scheduler
  • worker

案例

- sort 
  - sortbykey
  - sortbyvalue
   wordcount.map(x=>(x._2,x._1)).sortbykey(false).map(x=>(x._2,x._1)).collect(按照降序)
- top k
  -  wordcount.map(x=>(x._2,x._1)).sortbykey(false).map(x=>(x._2,x._1)).take(3)(取前三)
- group top key
  - rdd.map(_.split(" ")).map(x=>(x(0),x(1))).grouByKey.map(x=>{val xx=x._1
  val yy=x._2
  (xx,yy.tolist.sorted.reverse.take(3)
  )}).collect
   //tolist实现将前面得到的是iterable
  转变为list
  默认是升序,加reverse成降序
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容