分区器
object Spark_rdd_01 {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("RDD").setMaster("local[*]")
val sc = new SparkContext(conf)
val rdd: RDD[(String, String)] = sc.makeRDD(List(
("痛仰", "再见杰克"),
("二手玫瑰", "仙儿"),
("万青", "秦皇岛"),
("痛仰", "西湖")
), 3)
val partRDD: RDD[(String, String)] = rdd.partitionBy(new MyPartitioner)
partRDD.saveAsTextFile("datas\\part")
partRDD.collect().foreach(println)
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 "痛仰"=>0
case "二手玫瑰"=>1
case "万青"=>2
case _=>3
}
// if (key=="痛仰"){
// 0
// }else if (key=="二手玫瑰"){
// 1
// }else if (key=="万青"){
// 2
// }else{
// 3
// }
}
}
}
(痛仰,再见杰克)
(痛仰,西湖)
(二手玫瑰,仙儿)
(万青,秦皇岛)