RDD 的依赖关系

scala> var rdd1 = sc.textFile("./words.txt")rdd1: org.apache.spark.rdd.RDD[String] = ./words.txt MapPartitionsRDD[1] at textFile at :24scala> val rdd2 = rdd1.flatMap(_.split(" "))rdd2: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at flatMap at :26scala> val rdd3 = rdd2.map((_, 1))rdd3: org.apache.spark.rdd.RDD[(String, Int)] = MapPartitionsRDD[3] at map at :28scala> val rdd4 = rdd3.reduceByKey(_ + _)rdd4: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at :30

查看 RDD 的血缘关系

scala> rdd1.toDebugStringres0: String =(2) ./words.txt MapPartitionsRDD[1] at textFile at :24 []| ./words.txt HadoopRDD[0] at textFile at :24 []scala> rdd2.toDebugStringres1: String =(2) MapPartitionsRDD[2] at flatMap at :26 []| ./words.txt MapPartitionsRDD[1] at textFile at :24 []| ./words.txt HadoopRDD[0] at textFile at :24 []scala> rdd3.toDebugStringres2: String =(2) MapPartitionsRDD[3] at map at :28 []| MapPartitionsRDD[2] at flatMap at :26 []| ./words.txt MapPartitionsRDD[1] at textFile at :24 []| ./words.txt HadoopRDD[0] at textFile at :24 []scala> rdd4.toDebugStringres3: String =(2) ShuffledRDD[4] at reduceByKey at :30 []+-(2) MapPartitionsRDD[3] at map at :28 []| MapPartitionsRDD[2] at flatMap at :26 []| ./words.txt MapPartitionsRDD[1] at textFile at :24 [] | ./words.txt HadoopRDD[0] at textFile at :24 []

说明:

圆括号中的数字表示 RDD 的并行度. 也就是有几个分区.

查看 RDD 的依赖关系

scala> rdd1.dependenciesres4: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.OneToOneDependency@74d2525f)scala> rdd2.dependenciesres5: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.OneToOneDependency@401358e5)scala> rdd3.dependenciesres6: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.OneToOneDependency@4ed2eee1)scala> rdd4.dependenciesres7: Seq[org.apache.spark.Dependency[_]] = List(org.apache.spark.ShuffleDependency@34341b2a)

想理解 RDDs 是如何工作的, 最重要的事情就是了解 transformations.

RDD 之间的关系可以从两个维度来理解: 一个是 RDD 是从哪些 RDD 转换而来, 也就是 RDD 的 parent RDD(s)是什么; 另一个就是 RDD 依赖于 parent RDD(s)的哪些 Partition(s). 这种关系就是 RDD 之间的依赖.

依赖 有 2 种策略:

1. 窄依赖(transformations with narrow dependencies)

2. 宽依赖(transformations with wide dependencies)

宽依赖对 Spark 去评估一个 transformations 有更加重要的影响, 比如对性能的影响.

窄依赖

如果 B RDD 是由 A RDD 计算得到的, 则 B RDD 就是 Child RDD, A RDD 就是 parent RDD.

如果依赖关系在设计的时候就可以确定, 而不需要考虑父 RDD 分区中的记录, 并且如果父 RDD 中的每个分区最多只有一个子分区, 这样的依赖就叫窄依赖

一句话总结: 父 RDD 的每个分区最多被一个 RDD 的分区使用

具体来说, 窄依赖的时候, 子 RDD 中的分区要么只依赖一个父 RDD 中的一个分区(比如map, filter操作), 要么在设计时候就能确定子 RDD 是父 RDD 的一个子集(比如: coalesce).

所以, 窄依赖的转换可以在任何的的一个分区上单独执行, 而不需要其他分区的任何信息.

宽依赖

如果 父 RDD 的分区被不止一个子 RDD 的分区依赖, 就是宽依赖.

宽依赖工作的时候, 不能随意在某些记录上运行, 而是需要使用特殊的方式(比如按照 key)来获取分区中的所有数据.

例如: 在排序(sort)的时候, 数据必须被分区, 同样范围的 key 必须在同一个分区内. 具有宽依赖的 transformations 包括: sort, reduceByKey, groupByKey, join, 和调用rePartition函数的任何操作.

spark将rdd转为string_SparkCore---RDD依赖相关推荐

  1. spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系

    2.6.1 Lineage RDD只支持粗粒度转换,即在大量记录上执行的单个操作.将创建RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区.RDD的Lineage会记录RDD的元数据信息 ...

  2. spark将rdd转为string_八、Spark之详解Tranformation算子

    RDD中的所有转换(Transformation)算子都是延迟加载的,也就是说,它们并不会直接计算结果.相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作.只有当发生一个要求返回结果 ...

  3. Hive数据分析——Spark是一种基于rdd(弹性数据集)的内存分布式并行处理框架,比于Hadoop将大量的中间结果写入HDFS,Spark避免了中间结果的持久化...

    转自:http://blog.csdn.net/wh_springer/article/details/51842496 近十年来,随着Hadoop生态系统的不断完善,Hadoop早已成为大数据事实上 ...

  4. spark RDD官网RDD编程指南

    http://spark.apache.org/docs/latest/rdd-programming-guide.html#using-the-shell Overview(概述) 在较高的层次上, ...

  5. Spark函数详解系列--RDD基本转换

    http://www.cnblogs.com/MOBIN/p/5373256.html 摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行 ...

  6. [Spark]PySpark入门学习教程---RDD介绍(2)

    一 RDD pyspark.RDD        SparkRDD RDD指的是弹性分布式数据集(Resilient Distributed Dataset),它是spark计算的核心.尽管现在都使用 ...

  7. 什么是spark的惰性计算?有什么优势?_spark——spark中常说RDD,究竟RDD是什么?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题第二篇文章,我们来看spark非常重要的一个概念--RDD. 在上一讲当中我们在本地安装好了spark,虽然我们只有lo ...

  8. Spark初识-弹性分布式数据集RDD

    Spark 的核心是建立在统一的抽象弹性分布式数据集(Resiliennt Distributed Datasets,RDD)之上的,这使得 Spark 的各个组件可以无缝地进行集成,能够在同一个应用 ...

  9. Spark源码走读1——RDD

    RDD全称Resilient Distributed DataSets,弹性的分布式数据集.是Spark的核心内容. RDD是只读的,不可变的数据集,也拥有很好的容错机制.他有5个主要特性 -A li ...

  10. Learning Spark中文版--第三章--RDD编程(1)

       本章介绍了Spark用于数据处理的核心抽象概念,具有弹性的分布式数据集(RDD).一个RDD仅仅是一个分布式的元素集合.在Spark中,所有工作都表示为创建新的RDDs.转换现有的RDD,或者调 ...

最新文章

  1. Python性能分析指南——中
  2. 华为自动驾驶实车实路测试视频曝光!徐直军:比特斯拉好多了
  3. 3、Oracle表空间管理
  4. FreeMarker生成word的代码
  5. Android之打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去
  6. Container Injection
  7. Django项目--登录判断装饰器
  8. Tensorflow object detection API 搭建自己的目标检测模型并迁移到Android上
  9. shell下的九大脚本实例
  10. python psutil.disk_python中psutil模块使用相关笔记
  11. Ubuntu Server Download
  12. 最简单求100以内质数算法
  13. Android 杂记 - 存货盘点用的客户端
  14. 百度SiteApp构建网站APP
  15. 《工程学导论》读后感
  16. Transformer代码详解与项目实战之Masking
  17. Java版本电子招标采购系统源代码—企业战略布局下的采购寻源
  18. memwatch使用笔记
  19. 运维级医院PACS系统全套源代码
  20. 从xss挑战之旅来重读xss(一)

热门文章

  1. 品味FastDFS~目录
  2. 嵌套DIV中的onClick事件在嵌套容器中的连环作用
  3. Biztalk中Host Instance线程控制
  4. 完全卸载mysql步骤
  5. BZOJ4480[JSOI2013]快乐的jyy
  6. python实现文件批量添加重命名
  7. ZJOI 2008 瞭望塔 三分法
  8. (三)JAVA使用POI操作excel
  9. 使用sourcetree 的git flow
  10. Linux基本信息查看命令