重新分区

一 Vlue类型

10.coalesce()

函数签名 def coalesce(numPartitions: Int, //分区数量 shuffle: Boolean = false, //重新分区时是否打乱分区中(还未)的数据
partitionCoalescer: Option[PartitionCoalescer] = Option.empty)
(implicit ord: Ordering[T] = null) : RDD[T]

作用 缩减合并分区,用于大数据集合过滤后提高小数据集的执行效率

image.png

11.repartition()

函数签名 def repartition(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T] � 作用 扩大分区

三 Key-Value

17. partitionBy()

函数签名 def partitionBy(partitioner: Partitioner): RDD[(K, V)] � 作用 打乱数据、重新分区

例子

  1. val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("R13")
  2. val sc = new SparkContext(conf)
  3. val rdd1: RDD[Int] = sc.makeRDD(List(1,2,3,4),2)
  4. val mapRDD: RDD[(Int, Int)] = rdd1.map(item => (item, 1))
  5. val newRDD: RDD[(Int, Int)] = mapRDD.partitionBy(new HashPartitioner(3)) //可以自定义
  6. newRDD.saveAsTextFile("output")
  7. sc.stop()