自定义实现spark的分区函数

有时自己的业务需要自己实现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")
  }
}
复制代码

 

posted @   bonelee  阅读(3796)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示