spark core之RDD编程
来源:java大数据编程     阅读:596
织梦二开
发布于 2018-08-22 23:28
查看主页

Spark Core之RDD编程

??spark提供了对数据的核心笼统——弹性分布式数据集(Resilient Distributed Dataset,简称RDD)。RDD是一个分布式的数据集合,数据可以跨越集群中的多个机器节点,被分区并行执行。
??在spark中,对数据的所有操作不外乎创立RDD、转化已有RDD及调使用RDD操作进行求值。spark会自动地将RDD中的数据分发到集群中并行执行。

五大特性

创立RDD

??spark提供了两种创立RDD的方式:读取外部数据源、将驱动器程序中的集合进行并行化。

并行化集合

??用sparkContext的parallelize()方法将集合并行化。
??parallelize()方法第二个参数可指定分区数。spark会为每个分区创立一个task任务,通常每个cpu需要2-4个分区。spark会自动地根据集群大小设置分区数,也支持通过parallelize()方法的第二个参数手动指定。

scala

val data = Array(1, 2, 3, 4, 5)val distData = sc.parallelize(data)

java

List<Integer> data = Arrays.asList(1, 2, 3, 4, 5);JavaRDD<Integer> distData = sc.parallelize(data);

python

data = [1, 2, 3, 4, 5]distData = sc.parallelize(data)

??注:除了开发和测试外,这种方式使用得不多。这种方式需要把整个数据集先放到一台机器的内存中。

读取外部数据源

??spark可接入多种hadoop支持的数据源来创立分布式数据集。包括:本地文件系统、HDFS、Cassandra、HBase、Amazon S3等。
??spark支持多种存储格式,包括textFiles、SequenceFiles及其余hadoop存储格式。

scala

scala> val distFile = sc.textFile("data.txt")distFile: org.apache.spark.rdd.RDD[String] = data.txt MapPartitionsRDD[10] at textFile at <console>:26

java

JavaRDD<String> distFile = sc.textFile("data.txt");

python

>>> distFile = sc.textFile("data.txt")

RDD操作

??RDD支持两种操作:转化操作和行动操作。


算子.png

转化操作

??RDD的转化操作会返回一个新的RDD。转化操作是惰性求值的,只有行动操作使用到转化操作生成的RDD时,才会真正进行转化。


转化算子.png

??spark用lineage(血统)来记录转化操作生成的不同RDD之间的依赖关系。依赖分为窄依赖(narrow dependencies)和宽依赖(wide dependencies)。

行动操作

??行动操作则会向驱动器程序返回结果或者把结果写入外部系统,会触发实际的计算。


action算子.png

缓存方式

??RDD通过persist方法或者cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调使用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重使用。
??cache最终也是调使用了persist方法,默认的存储级别是仅在内存存储一份。

缓存.jpg
??Spark的存储级别还有好多种,存储级别在object StorageLevel中定义的。
缓存方式.png
??缓存有可能丢失,RDD的缓存容错机制保证即便缓存丢失也能保证计算正确执行。通过基于RDD的一系列转换,丢失的数据会被重算,因为RDD的各个Partition是相对独立的,因而只要要计算丢失的部分就可,并不需要重算一律Partition。

容错机制

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
基于Spring框架应用的权限控制系统的研究和实现
详解Nginx允许和屏蔽单个IP或者IP段访问配置方案
React Suite 3.1.0 版本发布,支持按需加载
非科班出生的Web前台程序员,从这三个方面来提升自己
这里有C/C++从入门到进阶的书籍推荐,你需要吗?
首页
搜索
订单
购物车
我的