spark自定義分區及示例代碼

有時本身的業務須要本身實現spark的分區函數apache

如下代碼是實現一個自定義spark分區的demoide

實現的功能是根據key值的最後一位數字,寫到不一樣的文件函數

例如:spa

10寫入到part-00000scala

11寫入到part-00001code

.繼承

.get

.it

19寫入到part-00009spark


給讀者提供一個自定義分區的思路


import org.apache.spark.{Partitioner, SparkContext, SparkConf}

//自定義分區類,需繼承Partitioner類
class UsridPartitioner(numParts:Int) extends Partitioner{
  //覆蓋分區數
  override def numPartitions: Int = numParts
  
  //覆蓋分區號獲取函數
  override def getPartition(key: Any): Int = {
    key.toString.toInt%10
  }
}

object Test {
  def main(args: Array[String]) {
    val conf=new SparkConf()
    val sc=new SparkContext(conf)

    //模擬5個分區的數據
    val data=sc.parallelize(1 to 10,5)
    
    //根據尾號轉變爲10個分區,分寫到10個文件
    data.map((_,1)).partitionBy(new UsridPartitioner(10)).saveAsTextFile("/chenm/partition")
  }
}
相關文章
相關標籤/搜索