Scala Spark:窗口函数是自定义分区的替代品吗?

Scala Spark:窗口函数是自定义分区的替代品吗?,scala,apache-spark,apache-spark-sql,apache-spark-dataset,Scala,Apache Spark,Apache Spark Sql,Apache Spark Dataset,我对最新的spark版本(在数据帧/数据集上)中如何真正应用自定义分区器(RDD)感到困惑。 是否可以通过SparkSQL的窗口函数处理所有自定义分区? 或者,在自定义分区时,我们是否需要在rdd和数据帧/数据集之间来回切换 主要是用复杂的键对数据进行分区和排序 class CustomePartitioner(partitions: Int) extends Partitioner { override def numPartitions: Int = partitions o

我对最新的spark版本(在数据帧/数据集上)中如何真正应用自定义分区器(RDD)感到困惑。 是否可以通过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))
    }
  }
类CustomePartitioner(partitions:Int)扩展了Partitioner{
覆盖def numPartitions:Int=partitions
覆盖def getPartition(键:Any):Int={
val k=键.asInstanceOf[TMPCASECASE类]
k、 tmpCaseClass.SomeId.hashCode()%n部分
}
}
案例类别TMPCASE类{
....
}
对象tmpCaseClass类{
隐式def orderingById[A(fk.SomeId,fk.SomeName))
}
}
我没有任何具体的例子,因为我不清楚。 有人能举个例子来解释一下吗,或者指出一个已经回答过的话题来准确地解释这个问题吗