collect()方法是一种行动操作,可以将 RDD 中所有元素转换成数组并返回到 Driver 端适用于返回处理后的少量数据。因为需要从集群各个节点收集数据到本地,经过网络传输并且加载到 Driver 内存中,所以如果数据量比较大,会给网络传输造成很大的压力。因此数据量较大时,尽量不使用collect()方法,否则可能导致Driver端出现内存溢出问题。collect()方法有以下两种操作方式。
(1)collect:直接调用 collect返回该 RDD 中的所有元素,返回类型是一个 Array[T]数组,这是较为常用的一种方式。
使用 collect()方法査看在 sq_dist 和 sort _data 的结果,分别返回了经过平方运算后的 Int 类型的数组和对元组第二个值进行降序排列后的数组。 (2)collect[U: ClassTag](f: PartialFunction[T, U]):RDD[U]。这种方式需要提供一个标准的偏函数,将元素保存至一个 RDD 中。首先定义一个函数 one,用于将 collect方法得到的数组中数值为1的值替换为“one”,将其他值替换为“other”。创建一个只有3个 In类型数据的 RDD,在使用 collect()方法时将 one 函数作为参数。