前言(摘自Spark快速大数据分析)
基于分区对数据进行操作可以让我们避免为每个数据元素进行重复的配置工作。诸如打开数据库连接或创建随机数生成器等操作,都是我们应当尽量避免为每个元素都配置一次的工作。Spark 提供基于分区的map 和foreach,让你的部分代码只对RDD 的每个分区运行一次,这样可以帮助降低这些操作的代价。
当基于分区操作RDD 时,Spark 会为函数提供该分区中的元素的迭代器。返回值方面,也返回一个迭代器。除mapPartitions() 外,Spark 还有一些别的基于分区的操作符,见下表:
函数名 | 调用所提供的 | 返回的 | 对于RDD[T]的函数签名 |
---|---|---|---|
mapPartitions() | 该分区中元素的迭代器 | 返回的元素的迭代器 | f: (Iterator[T]) → Iterator[U] |
mapPartitionsWithIndex() | 分区序号,以及每个分区中的元素的迭代器 | 返回的元素的迭代器 | f: (Int, Iterator[T]) → Iterator[U] |
foreachPartitions() | 元素迭代器 | 无 | f: (Iterator[T]) → Unit |