scala – 如何为相同大小的分区的Spark RDD定义自定义分区,其中
发布时间:2020-12-16 09:32:45 所属栏目:安全 来源:网络整理
导读:我是Spark的新手我有一个大的元素数据集[RDD],我想把它分成两个完全相同的大小的分区,维护元素的顺序。我尝试使用RangePartitioner var data = partitionedFile.partitionBy(new RangePartitioner(2,partitionedFile)) 这并没有给出令人满意的结果,因为它
我是Spark的新手我有一个大的元素数据集[RDD],我想把它分成两个完全相同的大小的分区,维护元素的顺序。我尝试使用RangePartitioner
var data = partitionedFile.partitionBy(new RangePartitioner(2,partitionedFile)) 这并没有给出令人满意的结果,因为它分割大致但并不完全相同的维数维度。 我需要一个分区器,这样我就可以得到一半的前32个元素,另外一半包含第二组32个元素。 解决方法
分区工作通过分配一个键到一个分区。您需要事先知道密钥分发,或查看所有密钥,才能使这样的分割器。这就是为什么Spark不提供一个。
一般来说,您不需要这样的分区器。实际上我不能想出一个需要等尺寸分区的用例。如果元素的数量是奇数怎么办? 无论如何,让我们说你有一个按顺序Ints键入的RDD,你知道总共有多少。那么你可以这样写一个自定义的分区器: class ExactPartitioner[V]( partitions: Int,elements: Int) extends Partitioner { def getPartition(key: Any): Int = { val k = key.asInstanceOf[Int] // `k` is assumed to go continuously from 0 to elements-1. return k * partitions / elements } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |