欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spark之编程模型RDD

程序员文章站 2023-01-23 13:54:02
前言:Spark编程模型两个主要抽象,一个是弹性分布式数据集RDD,它是一种特殊集合,支持多种数据源,可支持并行计算,可缓存;另一个是两种共享变量,支持并行计算的广播变量和累加器。 1.RDD介绍 Spark大数据处理平台建立在RDD之上,RDD是Spark的核心概念,最主要的抽象之一。RDD和Sp ......

前言:spark编程模型两个主要抽象,一个是弹性分布式数据集rdd,它是一种特殊集合,支持多种数据源,可支持并行计算,可缓存;另一个是两种共享变量,支持并行计算的广播变量和累加器。 

1.rdd介绍

    spark大数据处理平台建立在rdd之上,rdd是spark的核心概念,最主要的抽象之一。rdd和spark之间的关系是,rdd是一种基于内存的具有容错性的集群抽象方法,spark是这个抽象方法的实现。

    rdd(resilient distributed dataset)叫做弹性分布式数据集,是spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。rdd具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。rdd允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。

1.1 rdd的特征

    (1)分区(partition):一个数据分片列表。能够将数据切分,切分好的数据能够进行并行计算,是数据集的原子组成部分。用户可以在创建rdd时指定rdd的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的cpu core的数目。

    (2)函数(compute):一个计算rdd每个分片的函数。rdd的计算是以分片为单位的,每个rdd都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。

    (3)依赖(dependency):rdd的每次转换都会生成一个新的rdd,所以rdd之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对rdd的所有分区进行重新计算。

    (4)优先位置(可选):一个列表,存储存取每个partition的优先位置(preferred location)。对于一个hdfs文件来说,这个列表保存的就是每个partition所在的块的位置。按照“移动数据不如移动计算”的理念,spark在进行任务调度的时候,会尽可能地将计算任务分配到其所要处理数据块的存储位置。

    (5)分区策略(可选):一个partitioner,即rdd的分片函数,描述分区的模式和数据存放的位置。当前spark中实现了两种类型的分片函数,一个是基于哈希的hashpartitioner,另外一个是基于范围的rangepartitioner。只有对于于key-value的rdd,才会有partitioner,非key-value的rdd的parititioner的值是none。partitioner函数不但决定了rdd本身的分片数量,也决定了parent rdd shuffle输出时的分片数量。

     常见的rdd有很多种,每个transformation操作都会产生一种rdd,一下是各种rdd特征比较。

             Spark之编程模型RDD

1.2 rdd依赖