不多说,直接上干货!

 

 

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

}

 

参考阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。
大家都在看: