问题描述
我知道对于 PairRDD(键、值),我们可以给出我们自己的分区方案或使用默认分区器(哈希和范围)对其进行分区。但是,有没有办法使用我们自己的分区类来对普通 RDD 进行分区?
谢谢!
解决方法
需要继承抽象类org.apache.spark.Partitioner
并提供两个方法的实现:
class WeekDayPartitioner extends Partitioner {
override def numPartitions: Int = 7
override def getPartition(key: Any): Int = key.asInstanceOf[LocalDate].getDayOfWeek
}
val partitioner = new WeekDayPartitioner()
myRdd.partitionBy(partitioner) //RDD[(LocalDate,String)]