• 通过正确的分区,可以带来明显的性能提升
      • 为分布式数据集选择正确的分区,类似于为传统的数据集选择合适的数据结构
    1. 分区并不是对所有应用都是有好处的:如果给定的 只需要被扫描一次,则我们完全没有必要对其预先进行分区处理。

      • 只有当数据集多次在诸如连接这种基于键的操作中使用时,分区才会有帮助。
    2. Spark 中所有的键值对RDD 都可以进行分区。系统会根据一个针对键的函数对元素进行分组。

      • spark 可以确保同一个组的键出现在同一个节点上
    3. 许多spark 操作会利用已有的分区信息,如join()、leftOuterJoin()、rightOuterJoin()、cogroup()、groupWith()、groupByKey()、reduceByKey()、combineByKey()、lookup() 。 这些操作都能从分区中获得收益。

      • 任何需要将数据根据键跨节点进行混洗的操作,都能够从分区中获得好处
    1. .getNumPartitions 属性可以查看RDD 的分区数
      • 如果未指定该参数,则spark 根据集群的大小会自动推断出一个有意义的默认值
    1. .repartition(numPartitions):返回一个拥有指定分区数量的新的RDD

      • 新的分区数量可能比旧分区数增大,也可能减小。
    2. .coalesce(numPartitions,shuffle=False):返回一个拥有指定分区数量的新的RDD

      • 新的分区数量必须比旧分区数减小
      • 新的分区数量可能比旧分区数增大,也可能减小。
      • 这里partitionFunc 是分区函数。注意:如果你想让多个RDD 使用同一个分区方式,则应该使用同一个分区函数对象(如全局函数),而不要给每个 创建一个新的函数对象。
    3. 对于重新调整分区的操作结果,建议对其持久化。