打赏

Spark RDD概念学习系列之Pair RDD的分区控制

 

 

  不多说,直接上干货!

 

 

Pair RDD的分区控制

  Pair RDD的分区控制

  (1) Spark 中所有的键值对RDD 都可以进行分区控制---自定义分区

  (2)自定义分区的好处:

     1) 避免数据倾斜

     2) 控制task并行度

 

 

 

  自定义分区方式

class DomainNamePartitioner(numParts: Int) extends Partitioner {
    override def numPartitions: Int = numParts
    override def getPartition(key: Any): Int = {
        val domain = new Java.net.URL(key.toString).getHost()
        val code = (domain.hashCode % numPartitions)
        if(code < 0) {
            code + numPartitions // 使其非负
        }else{
            code
        }
    }
    // 用来让Spark区分分区函数对象的Java equals方法
    override def equals(other: Any): Boolean = other match {
        case dnp: DomainNamePartitioner =>
            dnp.numPartitions == numPartitions
        case _ =>
            false
    }

 

posted @ 2017-06-04 18:15  大数据和AI躺过的坑  阅读(634)  评论(0)    收藏  举报