Spark RDD 的 collect action

Spark RDD 的 collect action 是将 RDD 中的所有元素收集到一个可变数组中,返回一个包含 RDD 中所有元素的数组,是一个行动操作。

不适用于单个 element size 过大的示例分析

1、当 RDD 中的元素单个 element size 过大时,使用 collect action 就会出现问题。因为当 RDD 中的元素过大时,将这些元素收集到一个数组中,可能会导致内存溢出,从而导致程序出错。

2、下面是一个示例,假设 RDD 中的元素是一个很大的文件,比如一个 1G 的文件,如果使用 collect action 将这些文件收集到一个数组中,可能会导致内存溢出,因此不能使用 collect action 来收集这种大小的文件。

val rdd = sc.textFile("hdfs://1G.txt")
val res = rdd.collect()
JavaScript

3、此外,如果 RDD 中的元素是一个很大的对象,比如一个 1G 的对象,使用 collect action 也会出现问题,因为将这些对象收集到一个数组中,可能会导致内存溢出,从而导致程序出错。

val rdd = sc.parallelize(Array(1GObject))
val res = rdd.collect()
JavaScript

总结

总的来说,当 RDD 中的元素单个 element size 过大时,使用 collect action 就会出现问题,比如将一个 1G 的文件或者对象收集到一个数组中,可能会导致内存溢出,从而导致程序出错,所以不能使用 collect action 来收集这种大小的文件或对象。