Transformation
操作是延迟计算的,也就是说从一个
RDD
转换生成另一个
RDD
的转换操作不是马上执行,需要等到有
Acion
操作的时候才会真正触发运算。
Transformation返回的数据类型是一个RDD
Action 算子会触发 Spark 提交作业(Job),并将数据输出 Spark系统
Action返回的类型是一个其他的数据类型
详细解说:
Transformation操作和Action操作的区别在于Spark计算RDD的方式不同。
只有当代码中用Action操作时,spark才会进行计算否则是不会进行计算的,这种策略刚开 始看起来可能会显得很奇怪,不过在大数据领域中是很有道理的。比如我读取一个文件中的数据然后进行过滤,然后Action算子first取得第一行。
如果spark在我们运行sc.textFile的时候就把文件中所有的读取并存储进来的话会消耗很多的存储空间,更不要说我们紧接着就要就行过滤操作了。
相反,一旦Spark了解了,所有的Transformation算子以后(spark会在内部记录下所要求执行操作的相关信息)在Action算子first中,Spark只需要扫描文件直到找到第一个匹配的行为止,而并不需要读取整个文件