Я немного сбит с толку тем, как настраиваемые разделители (RDD) действительно применяются в последних версиях Spark (для Dataframes / Datasets).
Могут ли все пользовательские разделители обрабатываться через оконные функции SparkSQL?
Или нам нужно переходить туда и обратно между rdd и наборами данных / наборами данных при пользовательском разбиении?
В основном, это для разделения данных со сложными ключами и сортировки в них.
class CustomePartitioner(partitions: Int) extends Partitioner {
override def numPartitions: Int = partitions
override def getPartition(key: Any): Int = {
val k = key.asInstanceOf[tmpCaseClass]
k.tmpCaseClass.SomeId.hashCode() % numPartitions
}
}
case clase tmpCaseClass {
....
}
object tmpCaseClass {
implicit def orderingById[A <: tmpCaseClass] : Ordering[A] = {
Ordering.by(fk => (fk.SomeId, fk.SomeName))
}
}
У меня нет конкретного примера по этому поводу, так как мне не ясно.
Может кто-нибудь объяснить, например, или указать на уже отвеченную тему, которая точно объясняет это?