Spark partitioner

2019-07-16  本文已影响0人  clive0x

Partitioner.scala,

Spark提供HashPartitioner和RangePartitioner

前者通过key.hashcode%partitions决定分区,弊端就是hashcode不确定可能导致分配不均匀。

RangePartitioner使一定范围的key进入一个分区,i分区比i+1分区key要小,分区内部没有按key排序。

一定范围根据水桶抽样决定weight。

两个分区操作默认partitioner确定方法:

如果父分区存在的有效的(存在partitioner的RDD分区数与父RDD最大的分区数相差在一个数据级内)partitioner或者partitioner大于默认分区数(配置了spark.default.parallelism或者父RDD最多的分区数),则使用父RDD 具有partitioner并且partitions最多的partitioner,否则使用HashPartitioner

// If the existing max partitioner is an eligible one, or its partitions number is larger

    // than the default number of partitions, use the existing partitioner.

    if (hasMaxPartitioner.nonEmpty && (isEligiblePartitioner(hasMaxPartitioner.get, rdds) ||

        defaultNumPartitions < hasMaxPartitioner.get.getNumPartitions)) {

      hasMaxPartitioner.get.partitioner.get

    } else {

      new HashPartitioner(defaultNumPartitions)

    }

上一篇 下一篇

猜你喜欢

热点阅读