对spark内存迭代计算框架的理解误区

Posted nyist-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对spark内存迭代计算框架的理解误区相关的知识,希望对你有一定的参考价值。

在spark中很多时候我们常常以为一个文件是会被完整读入到内存,然后做各种变换。其实并不是这样的,除非你主动对RDD进行Cache/Persist缓存操作。

举一个简单的例子:

  sc.textfile("test.txt").map().saveasTextfile();

使用sc.textfile("test.txt") 算子获取一个初始的RDD(为了便于区分命名为rdd1,这里只考虑只有一个分区),在这个过程中并不是把test.txt文件中的数据作为一个整体处理的,而是对test.txt文件中的每一行数据进行一行一行的读取到内存中,直接进行计算,不再经过磁盘(这一点与Hadoop的mapreduce计算框架不同,也正是由于这个原因,spark的计算速度相较于mapreduce快很多)。举一个例子:执行sc.textfile("test.txt")获取到了test文件中第一行数据line1,对line1执行map()算子,得到 line1_1,如果没有设置持久化机制 line1被计算过后可能就被清除掉了,然后对line1_1保存到磁盘文件中,其他数据重复如此。

  这是由于这样,即使内存很小,也可以处理大量的数据。

 

以上是关于对spark内存迭代计算框架的理解误区的主要内容,如果未能解决你的问题,请参考以下文章

为啥Spark比MapReduce快?

08 内存计算框架Spark

Spark运行原理及RDD解密

大数据之二:Hadoop与Spark辨析

寒假自学进度报告1

Spark MLlib介绍