spark自定义分区器

/**
 * !!!!!
 * 模仿自带分区器,自定义分区器
 * 自定义,哪个分区放什么数据
 */
object Test{
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("wordCount")
    val sc: SparkContext = new SparkContext(sparkConf)
    val rdd = sc.makeRDD(List(//希望s放一个分区,其他各放一个分区
      ("s","XXX"),
      ("makeup","XXX"),
      ("words","XXX"),
      ("s","XXX")
    ),2)//这里暂定了分区,后续可以改变


    val partRdd = rdd.partitionBy(new MyPartitioner)
    partRdd.saveAsTextFile("output")//output中3个文件
    sc.stop()
  }

  /**
   * 自定义分区器
   * 1.继承Partitioner
   * 2.重写方法
   */
  class MyPartitioner extends Partitioner{
    //分区数量
    override def numPartitions: Int = 3
    //根据数据的Key值返回数据的分区索引,从0开始
    override def getPartition(key: Any): Int = {
      key match{
        case "s" =>0
        case "words"=>1
        case _ =>2
      }
    }
  }
}

你可能感兴趣的:(spark大数据分析,spark,big,data)