标签:数据集 创建 book 区域 contain 定义 内容 操作 模型
定义:Resilient distributed datasets (RDD), an efficient, general-purpose and fault-tolerant abstraction for sharing data in cluster applications.
RDD 是只读的。
RDD 是分区记录的集合。
RDD 是容错的。--- lineage RDD 是高效的。
RDD 不需要物化。---物化:进行实际的变换并最终写入稳定的存储器上
RDD 可以缓存的。---可指定缓存级别
RDD是spark的核心,也是整个spark的架构基础,RDD是弹性分布式集合(Resilient Distributed Datasets)的简称,是分布式只读且已分区集合对象。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。
Spark中将1~100的数组转换为rdd。
通过第15行的size获得rdd的partition的个数,此处创建rdd显式指定定分区个数2,默认数值是这个程序所分配到的资源的cpu核的个数。
返回此RDD的一个partition的数据块信息,如果一个数据块(block)有多个备份在返回所有备份的location地址信息:主机ip或域名。
作用:spark在进行任务调度室尽可能根据block的地址做到本地计算。
RDD之间的依赖关系分为两类:
● 窄依赖
每个父RDD的分区都至多被一个子RDD的分区使用,即为OneToOneDependecies。
● 宽依赖
多个子RDD的分区依赖一个父RDD的分区,即为ShuffleDependency 。例如,map操作是一种窄依赖,而join操作是一种宽依赖(除非父RDD已经基于Hash策略被划分过了,co-partitioned)。
窄依赖相比宽依赖更高效资源消耗更少
在窄依赖中,节点失败后的恢复更加高效。
分区计算:Spark对RDD的计算是以partition为最小单位的,并且都是对迭代器进行复合,不需要保存每次的计算结果。
分区函数:目前spark中提供两种分区函数:
且partitioner只存在于(K,V)类型的RDD中,rdd本身决定了分区的数量。
val lines = sc.textFile("hdfs://...") // transformed RDDs val errors = lines.filter(_.startsWith("ERROR")) val messages = errors.map(_.split("\t")).map(r => r(1)) messages.cache() // action 1 messages.filter(_.contains("mysql")).count() // action 2 messages.filter(_.contains("php")).count()
RDD经过trans或action后产生一个新的RDD,RDD之间的通过lineage来表达依赖关系,lineage是rdd容错的重要机制,rdd转换后的分区可能在转换前分区的节点内存中。
标签:数据集 创建 book 区域 contain 定义 内容 操作 模型
原文地址:https://www.cnblogs.com/zimo-jing/p/9641583.html