1.3RDD的设计与运行原理

此文为个人学习笔记如需系统学习请访问http://dblab.xmu.edu.cn/blog/1709-2/

提供一种通用的数据抽象

RDD典型的执行过程如下:

  1. RDD读入外部数据源(或者内存中的集合)进行创建;
  2. RDD经过一系列的“转换”操作,每一次都会产生不同的RDD,供给下一个“转换”使用;
  3. 最后一个RDD经“行动”操作进行处理,并输出到外部数据源(或者变成Scala集合或标量)。

概念好难   笨      环境安装https://mp.csdn.net/postedit/82709116

例1:一个Spark的“Hello World”程序

这里以一个“Hello World”入门级Spark程序来解释RDD执行过程,这个程序的功能是读取一个HDFS文件,计算出包含字符串“Hello World”的行数。

fileRDD = sc.textFile('hdfs://localhost:9000/test.txt')
def contains(line):
...     return 'hello world' in line
filterRDD = fileRDD.filter(contains)
filterRDD.cache()
filterRDD.count()

第1行代码从HDFS文件中读取数据创建一个RDD;第2、3行定义一个过滤函数;第4行代码对fileRDD进行转换操作得到一个新的RDD,即filterRDD;第5行代码表示对filterRDD进行持久化,把它保存在内存或磁盘中(这里采用cache接口把数据集保存在内存中),方便后续重复使用,当数据被反复访问时(比如查询一些热点数据,或者运行迭代算法),这是非常有用的,而且通过cache()可以缓存非常大的数据集,支持跨越几十甚至上百个节点;第5行代码中的count()是一个行动操作,用于计算一个RDD集合中包含的元素个数。这个程序的执行过程如下:这个程序的执行过程如下:
*  创建这个Spark程序的执行上下文,即创建SparkContext对象;
*  从外部数据源(即HDFS文件)中读取数据创建fileRDD对象;
*  构建起fileRDD和filterRDD之间的依赖关系,形成DAG图,这时候并没有发生真正的计算,只是记录转换的轨迹;
*  执行到第6行代码时,count()是一个行动类型的操作,触发真正的计算,开始实际执行从fileRDD到filterRDD的转换操作,并把结果持久化到内存中,最后计算出filterRDD中包含的元素个数。

posted @ 2018-09-15 14:16  莫逸风  阅读(106)  评论(0编辑  收藏  举报