有时本身的业务须要本身实现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") } }