我定义了一个火花分割器,并希望它按键对数据进行分割,在我的示例中,结果数据应该是三个不同的文件(不为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”位于同一分区
答案 0 :(得分:0)
在两个“ if”之间的“ Mypartitioner2”中缺少“ else”子句。