有时自己的业务需要自己实现spark的分区函数
以下代码是实现一个自定义spark分区的demo
实现的功能是根据key值的最后一位数字,写到不同的文件
例如:
10写入到part-00000
11写入到part-00001
.
.
.
19写入到part-00009
自定义分区:
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") } }