在 Spark 中对普通 RDD 进行分区

问题描述

我知道对于 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)]