spark将rdd转为string_SparkCore---RDD依赖
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依赖相关推荐
- spark将rdd转为string_大数据技术之SparkCore(三)RDD依赖关系
2.6.1 Lineage RDD只支持粗粒度转换,即在大量记录上执行的单个操作.将创建RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区.RDD的Lineage会记录RDD的元数据信息 ...
- spark将rdd转为string_八、Spark之详解Tranformation算子
RDD中的所有转换(Transformation)算子都是延迟加载的,也就是说,它们并不会直接计算结果.相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作.只有当发生一个要求返回结果 ...
- Hive数据分析——Spark是一种基于rdd(弹性数据集)的内存分布式并行处理框架,比于Hadoop将大量的中间结果写入HDFS,Spark避免了中间结果的持久化...
转自:http://blog.csdn.net/wh_springer/article/details/51842496 近十年来,随着Hadoop生态系统的不断完善,Hadoop早已成为大数据事实上 ...
- spark RDD官网RDD编程指南
http://spark.apache.org/docs/latest/rdd-programming-guide.html#using-the-shell Overview(概述) 在较高的层次上, ...
- Spark函数详解系列--RDD基本转换
http://www.cnblogs.com/MOBIN/p/5373256.html 摘要: RDD:弹性分布式数据集,是一种特殊集合 ‚ 支持多种来源 ‚ 有容错机制 ‚ 可以被缓存 ‚ 支持并行 ...
- [Spark]PySpark入门学习教程---RDD介绍(2)
一 RDD pyspark.RDD SparkRDD RDD指的是弹性分布式数据集(Resilient Distributed Dataset),它是spark计算的核心.尽管现在都使用 ...
- 什么是spark的惰性计算?有什么优势?_spark——spark中常说RDD,究竟RDD是什么?
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是spark专题第二篇文章,我们来看spark非常重要的一个概念--RDD. 在上一讲当中我们在本地安装好了spark,虽然我们只有lo ...
- Spark初识-弹性分布式数据集RDD
Spark 的核心是建立在统一的抽象弹性分布式数据集(Resiliennt Distributed Datasets,RDD)之上的,这使得 Spark 的各个组件可以无缝地进行集成,能够在同一个应用 ...
- Spark源码走读1——RDD
RDD全称Resilient Distributed DataSets,弹性的分布式数据集.是Spark的核心内容. RDD是只读的,不可变的数据集,也拥有很好的容错机制.他有5个主要特性 -A li ...
- Learning Spark中文版--第三章--RDD编程(1)
本章介绍了Spark用于数据处理的核心抽象概念,具有弹性的分布式数据集(RDD).一个RDD仅仅是一个分布式的元素集合.在Spark中,所有工作都表示为创建新的RDDs.转换现有的RDD,或者调 ...
最新文章
- Python性能分析指南——中
- 华为自动驾驶实车实路测试视频曝光!徐直军:比特斯拉好多了
- 3、Oracle表空间管理
- FreeMarker生成word的代码
- Android之打开继承DialogFragment对话框里面EditText获取光标并且弹出键盘把底部布局顶上去
- Container Injection
- Django项目--登录判断装饰器
- Tensorflow object detection API 搭建自己的目标检测模型并迁移到Android上
- shell下的九大脚本实例
- python psutil.disk_python中psutil模块使用相关笔记
- Ubuntu Server Download
- 最简单求100以内质数算法
- Android 杂记 - 存货盘点用的客户端
- 百度SiteApp构建网站APP
- 《工程学导论》读后感
- Transformer代码详解与项目实战之Masking
- Java版本电子招标采购系统源代码—企业战略布局下的采购寻源
- memwatch使用笔记
- 运维级医院PACS系统全套源代码
- 从xss挑战之旅来重读xss(一)