一、RDD算子补充
1、mapPartitions
mapPartitions的输入函数作用于每个分区, 也就是把每个分区中的内容作为整体来处理。 (map是把每一行)
mapPartitions一次处理一个分区的所有数据,而map算子一次处理分区中的一条数据,所以mapPartitions处理数据的速度比map快,如果RDD分区的数据很庞大,用mapPartitions容易造成内存溢出,
如果RDD分区数据量小,从而提升速度的角度考虑,可以使用mapPartitions算子。
JAVA实现:
scala实现:
2、mapPartitionsWithIndex
mapPartitionsWithIndex方法与mapPartitions方法功能类似
不同的是mapPartitionsWithIndex还会对原始分区的索引进行 追踪, 这样就能知道分区所对应的元素 。 方法的参数为一个函数, 函数的输入为整型索引和迭代器。
JAVA实现:
scala实现:
补充:1、map:一次处理分区中的一条数据
mapPartitions:一次处理分区中的所有数据
mapPartitionsWithIndex:一次处理分区中的所有数据 ,并且返回分区的索引,索引从0开始
注意:如果RDD分区中的数据体量比较大,用mapPartitions或者mapPartitionsWithIndex进行计算,有可能出现内存溢出(OOM)
如果RDD分区数据体量比较小,此时为了提高数据
时间: 2024-10-27 13:37:18