Scala for RDD中的自定义分区程序未按预期工作

时间:2018-11-01 09:43:16

标签: apache-spark

我定义了一个火花分割器,并希望它按键对数据进行分割,在我的示例中,结果数据应该是三个不同的文件(不为null,其键为“ aaa”,“ aa”和“ a”),但是重新溶解只有两部分

class Mypartitioner2( num:Int) extends org.apache.spark.Partitioner{
      override def numPartitions: Int = num

      override def getPartition(key: Any): Int = {
          if(key.toString.size ==3){
                  2
              }
          if(key.toString.size ==2){
                  1
             }
          else {
                  0
             }
    }
 }

object PersonalPartitioner {
     def main(args: Array[String]): Unit = {
         val spark =SparkSession.builder().config(new SparkConf()).getOrCreate()
         val sc =spark.sparkContext
         val data =sc.parallelize(Array(
          ("aaa",2),("aaa",3),("aaa",1),("aaa",0),("aaa",4),
          ("aa",2),("aa",3),("aa",1),("aa",0),("aa",4),
          ("a",2),("a",3),("a",1),("a",0),("a",4) ))
         data.partitionBy(new Mypartitioner2(3)).saveAsTextFile("develop/wangdaopeng/lab4")
   }
   }

但是结果是 enter image description here

键“ aaa”和“ a”位于同一分区

1 个答案:

答案 0 :(得分:0)

在两个“ if”之间的“ Mypartitioner2”中缺少“ else”子句。