对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内存迭代计算框架的理解误区的主要内容,如果未能解决你的问题,请参考以下文章